首页 > 解决方案 > 使用通配符搜索多个字段的 Elastic Search 完全匹配查询

问题描述

我有如下弹性搜索数据存储,我需要通过这些数据编写多搜索 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”

任何人都可以帮我解决上述问题吗?

标签: elasticsearchelasticsearch-query

解决方案


有 2 个选项可以实现您想要的。您可以选择其中一种来使用:

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

推荐阅读