弹性搜索中的模糊搜索给出了不正确顺序的匹配

时间:2017-04-28 07:25:57

标签: elasticsearch fuzzy-search elasticsearch-2.0 elasticsearch-5

我正在尝试构建一个引擎,我们可以将地址中提到的区域与elasticsearch中可用的列表进行匹配。

我正在使用此查询来搜索类似于“iit”的区域。

我的查询是:

{
   "query": {
      "fuzzy": {
         "locality": {
            "value": "iit",
            "fuzziness": 1
         }
      }
   },
   "highlight": {
      "fields": {
         "locality": {}
      }
   }
}

我收到了以下结果:

{
   "took": 4,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 2,
      "max_score": 2.1290483,
      "hits": [
         {
            "_index": "geocoding_1",
            "_type": "localities",
            "_id": "AVuzRiZ04pEQsZFpK6A_",
            "_score": 2.1290483,
            "_source": {
               "locality": [
                  "emerald isle ii"
               ]
            },
            "highlight": {
               "locality": [
                  "emerald isle <em>ii</em>"
               ]
            }
         },
         {
            "_index": "geocoding_1",
            "_type": "localities",
            "_id": "AVuzRfof4pEQsZFpK59H",
            "_score": 1.877402,
            "_source": {
               "locality": [
                  "iit - bombay",
                  "iitb",
                  "indian institute of technology - bombay"
               ]
            },
            "highlight": {
               "locality": [
                  "<em>iit</em> - bombay",
                  "<em>iitb</em>"
               ]
            }
         }
      ]
   }
}

因为“iit”在第二份文件中可以直接使用,因此我希望将其作为最高分的最佳匹配返回。我应该做出哪些改变,以便获得最高分的第二份文件。

我正在使用ES 2.3.4。

1 个答案:

答案 0 :(得分:2)

如果您对精确匹配感兴趣以获得更好的分数,我建议bool使用should语句,并在其中添加matchterm查询。通过这种方式,组合分数将有利于完全匹配:

{
  "query": {
    "bool": {
      "should": [
        {
          "fuzzy": {
            "locality": {
              "value": "iit",
              "fuzziness": 1
            }
          }
        },
        {
          "match": {
            "locality": "iit"
          }
        }
      ]
    }
  },
  "highlight": {
    "fields": {
      "locality": {}
    }
  }
}