如何匹配弹性搜索查询部分匹配多个查询?

时间:2020-07-20 03:37:39

标签: elasticsearch dsl

我的DSL查询在下面

GET index_name/_search
{
"query" : {
    "query_string" : {
      "query" : "*avi*",
      "fields" : [
        "data.name"
      ]
    }}}

我还需要添加"query" : "*ojh*"

以下查询无效

GET index_name/_search
{
"query" : {
    "query_string" : {
      "query" : "*avi*",
      "query" : "*ojh*",
      "fields" : [
        "data.name"
      ]
    }}}

1 个答案:

答案 0 :(得分:1)

您需要利用bool/should查询并添加两个query_string查询:

{
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "query": "*avi*",
            "fields": [
              "data.name"
            ]
          }
        },
        {
          "query_string": {
            "query": "*ojh*",
            "fields": [
              "data.name"
            ]
          }
        }
      ]
    }
  }
}

不过,请注意,像这样进行中缀搜索可能会破坏群集的性能。有关如何正确执行“子字符串”搜索的信息,请参见this thread