在elastic search中忽略'AND'、'OR'和query_string的结构,按字面搜索

Ignore 'AND', 'OR' constructions with query_string in elastic search and do literally search

在 elasticsearch 中可以执行以下查询:

GET /_search
    {
      "query": {
        "query_string": {
          "query": "(apple) OR (banana)",
        }
      }
    }

这会导致所有文档的任何字段的值为 'apple' 或 'banana'。我正在寻找一种方法来防止用户在搜索框中输入诸如“(apple) OR (banana)”之类的查询。 这应该转换为对“(apple) OR (banana)”的文字搜索(因此返回值设置为“(apple) OR (banana)”的任何文档)。最好的方法是什么?

为了提供更多上下文:选择“query_string”是为了能够使用通配符对整个文档执行 'contains' 查询。

提前致谢!

[编辑] 更清楚一点: 示例:

如果用户搜索 "(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)"
        }
      }
    ]