elasticsearch - 在弹性搜索中使用 query_string 忽略“AND”、“OR”结构并进行字面搜索
问题描述
在 elasticsearch 中,可以执行以下查询:
GET /_search
{
"query": {
"query_string": {
"query": "(apple) OR (banana)",
}
}
}
这将导致所有文档的任何字段的值为“apple”或“banana”。我正在寻找一种方法来防止用户在搜索框中编写诸如“(苹果)或(香蕉)”之类的查询。这应该转换为对“(apple) OR (banana)”的文字搜索(因此返回值设置为“(apple) OR (banana)”的任何文档)。最好的方法是什么?
为了提供更多上下文:选择“query_string”是为了能够使用通配符对整个文档执行“包含”查询。
先感谢您!
[编辑]更清楚一点:示例:
- 文档 1:{“小吃”:“苹果”}
- 文档 2:{“小吃”:“香蕉”}
- Doc 3: {"snack": "(apple) OR (banana)"}
如果用户搜索“(apple) OR (banana)”,这通常会导致 Doc 1 和 Doc 2,但我希望它只与 Doc 3 匹配。
感谢@Bhavya 和@TreffnonX 解决: 摘要:采用@Bhavya 解决方案,但将我的搜索字符串用额外的双引号括起来:
GET _search
{
"query": {
"query_string": {
"query": "\"\\(apple\\) OR \\(banana\\)\""
}
}
}
或者
GET _search
{
"query": {
"query_string": {
"query": "\"(apple) OR (banana)\""
}
}
}
解决方案
添加带有索引数据、搜索查询和搜索结果的工作示例
指数数据:
{ "snack": "apple" }
{"snack": "banana"}
{"snack": "(apple) OR (banana)"}
搜索查询:
{
"query": {
"query_string": {
"query": "\\(apple\\) OR \\(banana\\)"
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_64352271",
"_type": "_doc",
"_id": "1",
"_score": 4.0350027,
"_source": {
"snack": "(apple) OR (banana)"
}
}
]
推荐阅读
- azure-active-directory - 如何使用 ms graph api 仅列出 AAD 中的特定组?
- javascript - 比较两个 JSON 对象并验证数据不匹配
- javascript - 带日期的 SQL 查询在节点 mssql 中返回日期时间
- php - 在 jenkins 容器中安装 php 和 composer
- ofx - 如何在 Power BI 中解析 a-ofx-version-1-0-2-file?
- c++ - 在 C++ 中初始化一个数组
- python - 我的删除功能中的逻辑有问题吗?
- uml - Enterprise Architect:如何将多条概括线组合成一条线
- java - Android 问题:如何以编程方式在文本视图周围创建边框(不使用任何 XML)?
- excel - Excel VBA - 将选中的复选框保存到单元格