【发布时间】:2013-05-21 17:37:20
【问题描述】:
我在我的 ElasticSearch 索引中插入了 3 条记录,如下所示:
curl -XPOST 'http://127.0.0.1:9200/geoindex_test/STREET?pretty=1' -d '
{ "cityNames" : [ { "language" : "ENG",
"name" : "w bridgewater",
"raw_name" : "W BRIDGEWATER"
},
{ "language" : "ENG",
"name" : "west bridgewater",
"raw_name" : "West Bridgewater"
}
],
"id" : 1,
"streetNames" : [ { "language" : "ENG",
"name" : "cram rd",
"raw_name" : "Cram Rd"
} ]
}'
curl -XPOST 'http://127.0.0.1:9200/geoindex_test/STREET?pretty=1' -d '
{ "cityNames" : [ { "language" : "ENG",
"name" : "bridgewater corners",
"raw_name" : "BRIDGEWATER CORNERS"
},
{ "language" : "ENG",
"name" : "bridgewater center",
"raw_name" : "Bridgewater Center"
}
],
"id" : 2,
"streetNames" : [ { "language" : "ENG",
"name" : "valley view rd",
"raw_name" : "Valley View Rd"
} ]
}'
curl -XPOST 'http://127.0.0.1:9200/geoindex_test/STREET?pretty=1' -d '
{ "cityNames" : [ { "language" : "ENG",
"name" : "bridgewater",
"raw_name" : "Bridgewater"
},
{ "language" : "ENG",
"name" : "windsor",
"raw_name" : "Windsor"
}
],
"id" : 3,
"streetNames" : [ { "language" : "ENG",
"name" : "valley view rd",
"raw_name" : "Valley View Rd"
} ]
}'
然后我执行如下搜索:
curl -XGET 'http://127.0.0.1:9200/geoindex_test/STREET/_search?pretty=1' -d '
{
"query" : {
"match" : { "cityNames.name" : "bridgewater" }
}
}'
我认为 ElasticSearch 会返回第三条记录 (id == 3) 作为最佳匹配(记录 3 是唯一与“bridgewater”完全匹配的记录),但它会返回 id 1 (w bridgewater) 的记录作为最佳匹配。我做错了什么?
【问题讨论】:
-
如果您在请求中启用解释输出,您可以看到详细说明。只需将
explain=true请求参数添加到url。如果您可以将输出添加到您的答案中,我很乐意为您提供帮助。 -
@javanna - 谢谢你的回复。 explain=true 的输出超过了 stackoverflow 允许的字符数。抱歉,我无法提供信息。
-
也许您可以只发布相关部分或使用第三方服务,如 pastebin 或 github gist。
-
@javanna - 我以前从未使用过 pastebin。希望您可以访问我的帖子:pastebin.com/bfZQ9Uny
-
你得到的答案非常好。如您所见,前两个文档的 tf (term frequency) 2 与答案中解释的原因相同。第三个文档的 fieldNorm 更高,这就是它完美匹配的因素,但由于词频只是其中一个,其他文档的相关性更高。
标签: elasticsearch