我正在尝试构建一个引擎,我们可以将地址中提到的区域与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。
答案 0 :(得分:2)
如果您对精确匹配感兴趣以获得更好的分数,我建议bool
使用should
语句,并在其中添加match
或term
查询。通过这种方式,组合分数将有利于完全匹配:
{
"query": {
"bool": {
"should": [
{
"fuzzy": {
"locality": {
"value": "iit",
"fuzziness": 1
}
}
},
{
"match": {
"locality": "iit"
}
}
]
}
},
"highlight": {
"fields": {
"locality": {}
}
}
}