FirstMiddleLast 字段上的意外匹配查询评分
Unexpected Match query scoring on a FirstMiddleLast field
我正在使用 match 查询来搜索 fullName 字段,该字段包含(名字 [中间] 最后)格式的名称。我有两份文件,一份的全名是 "Brady Holt",另一份是 "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"
}
}
]
可以在 Elasticsearch 指南中找到有关 Elasticsearch 如何进行评分以及如何操纵相关性的好读物:What is Relevance?。特别是,您可能想尝试搜索查询的 explain
功能。
此处最简短的答案是,根据 TF/IDF 计算,命中得分是其 最佳匹配项 的乘积。匹配项的数量将影响匹配的文档,但决定文档得分的是 "best" 项。您的查询本身没有 "exact" 匹配项:它有多个匹配项,其分数是独立计算的。
调整相关性可能是一门微妙的艺术,在很大程度上取决于字段的分析方式、各种术语的总体频率分布、您的查询 运行,甚至如何您在一个集群内对索引进行分片和分布(不同的分片将具有不同的词频)。
(可以这么说,您的示例有两个拼写 "Holt" 和 "Holdt"。)
无论如何,熟悉 explain
功能和基本计分机制对您来说是一个很有帮助的下一步。
此外,如果您想要精确的短语匹配,您应该阅读 Phrase Matching 上的 ES 指南。
我正在使用 match 查询来搜索 fullName 字段,该字段包含(名字 [中间] 最后)格式的名称。我有两份文件,一份的全名是 "Brady Holt",另一份是 "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"
}
}
]
可以在 Elasticsearch 指南中找到有关 Elasticsearch 如何进行评分以及如何操纵相关性的好读物:What is Relevance?。特别是,您可能想尝试搜索查询的 explain
功能。
此处最简短的答案是,根据 TF/IDF 计算,命中得分是其 最佳匹配项 的乘积。匹配项的数量将影响匹配的文档,但决定文档得分的是 "best" 项。您的查询本身没有 "exact" 匹配项:它有多个匹配项,其分数是独立计算的。
调整相关性可能是一门微妙的艺术,在很大程度上取决于字段的分析方式、各种术语的总体频率分布、您的查询 运行,甚至如何您在一个集群内对索引进行分片和分布(不同的分片将具有不同的词频)。
(可以这么说,您的示例有两个拼写 "Holt" 和 "Holdt"。)
无论如何,熟悉 explain
功能和基本计分机制对您来说是一个很有帮助的下一步。
此外,如果您想要精确的短语匹配,您应该阅读 Phrase Matching 上的 ES 指南。