使用通配符搜索多个字段的弹性搜索精确匹配查询

时间:2021-07-22 16:27:15

标签: elasticsearch elasticsearch-query

我有如下弹性搜索数据存储,我需要通过这些数据编写多搜索ES查询,精确匹配和精确匹配+ *(通配符)

[
  {
    "id": "123",
    "name": "test123 abc bct",
    "externalObj": {
      "id": "abc 123"
    }
  },
  {
    "id": "124",
    "name": "test124 abc bct",
    "externalObj": {
      "id": "abc 124"
    }
  }
]

目前我已经写了如下查询,

{
  "query": {
    "query_string": {
      "fields": [
        "name^5",
        "id",
        "externalObj.*"
      ],
      "query": "(test124 abc)",
      "default_operator": "AND"
    }
  }
}

以上查询在完全匹配的情况下工作正常,但我还需要获取部分搜索的数据和响应的最大相关分数。那个东西不适用于这个查询。

例如:“查询”:“test124 ab”

有人可以帮我解决上述问题吗?

1 个答案:

答案 0 :(得分:0)

有 2 个选项可以实现您的目标。您可以选择其中之一来使用:

  1. mouseleave 设置为 default_operator(或者只是简单地将其删除,因为默认值为 OR)。
OR
  1. 将您的查询更改为 { "query": { "query_string": { "fields": [ "name^5", "id", "externalObj.*" ], "query": "test124 a" } } }
test124 a*