我正在尝试构建一个引擎,我们可以在地址中提到的区域与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。
如果您也有兴趣确切的匹配以更好地得分,我总是建议使用should
语句的bool
并在其中添加match
或term
查询。这样,组合分数将有利于确切的匹配:
{
"query": {
"bool": {
"should": [
{
"fuzzy": {
"locality": {
"value": "iit",
"fuzziness": 1
}
}
},
{
"match": {
"locality": "iit"
}
}
]
}
},
"highlight": {
"fields": {
"locality": {}
}
}
}