【问题标题】:Elastic search query not resulting as expected弹性搜索查询未按预期结果
【发布时间】:2021-07-12 08:42:16
【问题描述】:

具有如下弹性搜索查询-

{
  "query": {
    "bool": {
      "must": {
        "query": "*Hanry Oliver 45354*",
        "fields": [
          "firstName",
          "lastName",
          "customerNo"
        ],
        "default_operator": "AND"
      }
    }
  }
}

这会产生一个正确的记录。 但是如果使用 -

   "query":{
      "bool":{
         "must":{
            "query":"*Han Ol 453*",
            "fields":[
               "firstName",
               "lastName",
               "customerNo"
            ],
            "default_operator":"AND"
         }
      }
   }
}

它没有记录,而它应该匹配“Hanry Oliver 45354”。 如果删除 and 运算符,则会导致所有记录都匹配 han 或 ol 或 453,而查找具有 and- 的查询结果 hanOl453

有人可以帮忙在这种情况下应该使用什么查询吗?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    当您使用"query":"*Han Ol 453*" 时,查询字符串会搜索*Han AND OlAND 453*

    1. *Han --> 不会得到结果
    2. Ol --> 不会得到结果
    3. 453* --> 会得到结果

    由于453*,您使用OR 运算符而不是AND 运算符获得结果。


    您需要将搜索查询修改为

        {
      "query": {
        "query_string": {
          "query": "Han* Ol* 453*",     // note this
          "fields": [
            "firstName",
            "lastName",
            "customerNo"
          ],
          "default_operator": "and",
          "analyze_wildcard":true
        }
      }
    }
    

    搜索结果将是

    "hits": [
          {
            "_index": "67140182",
            "_type": "_doc",
            "_id": "1",
            "_score": 3.0,
            "_source": {
              "firstName": "Hanry",
              "lastName": "Oliver",
              "customerNo": "45354"
            }
          }
        ]
    

    【讨论】:

    • @user1315086 请仔细阅读答案,如果这能解决您的问题,请告诉我?
    • 谢谢。这对我有用。但我想在上面进行精确匹配,然后其他人喜欢 - Hanry Oliver、M Hanry Oliver、Hanry Tran Oliver
    猜你喜欢
    • 2016-08-05
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 2021-02-10
    • 2021-07-27
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多