我正在使用匹配查询来搜索包含(first [middle] last)格式名称的fullName字段。我有两个文件,一个是" Brady Holt"作为fullName,另一个作为" Brad von Holdt"。当我搜索" brady holt"时,带有" Brad von Holdt"获得的评分高于" Brady Holt"即使它完全匹配。我期待这份文件与" Brady Holt"获得最高分。我猜这与“von'中间名导致得分更高?
这些是我的文件:
[
{
"id": 509631,
"fullName": "Brad von Holdt"
},
{
"id": 55425,
"fullName": "Brady Holt"
}
]
这是我的疑问:
{
"query": {
"match": {
"fullName": {
"query": "brady holt",
"fuzziness": 1.0,
"prefix_length": 3,
"operator": "and"
}
}
}
}
这是查询结果:
"hits": [
{
"_index": "demo",
"_type": "person",
"_id": "509631",
"_score": 2.4942014,
"_source": {
"id": 509631,
"fullName": "Brad von Holdt"
}
},
{
"_index": "demo",
"_type": "person",
"_id": "55425",
"_score": 2.1395948,
"_source": {
"id": 55425,
"fullName": "Brady Holt"
}
}
]
答案 0 :(得分:0)
关于Elasticsearch如何评分以及如何操纵相关性的详细介绍可以在Elasticsearch指南中找到:What is Relevance?。特别是,您可能希望尝试搜索查询的explain
功能。
这里最简短的答案是,根据TF / IDF计算,命中得分是其最佳匹配词的乘积。匹配条件的数量将影响匹配的文档,但它是确定文档分数的“最佳”术语。您的查询本身没有“完全”匹配:它有多个匹配的字词,其分数是独立计算的。
调整相关性可能是一种微妙的艺术,并且很大程度上取决于字段的分析方式,各种术语的整体频率分布,运行的查询,甚至是如何分片和分发集群中的索引(不同的分片将具有不同的术语频率)。
(可能也可能是相关的,你的例子有两个拼写“Holt”和“Holdt”。)
在任何情况下,熟悉explain
功能和基础评分机制对您来说都是有用的下一步。
另外,如果您想要精确匹配词组,请阅读Phrase Matching上的ES指南。