FirstMiddleLast字段上的意外匹配查询评分

时间:2015-01-19 18:01:29

标签: elasticsearch

我正在使用匹配查询来搜索包含(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"
        }
      }
    ]

1 个答案:

答案 0 :(得分:0)

关于Elasticsearch如何评分以及如何操纵相关性的详细介绍可以在Elasticsearch指南中找到:What is Relevance?。特别是,您可能希望尝试搜索查询的explain功能。

这里最简短的答案是,根据TF / IDF计算,命中得分是其最佳匹配词的乘积。匹配条件的数量将影响匹配的文档,但它是确定文档分数的“最佳”术语。您的查询本身没有“完全”匹配:它有多个匹配的字词,其分数是独立计算的。

调整相关性可能是一种微妙的艺术,并且很大程度上取决于字段的分析方式,各种术语的整体频率分布,运行的查询,甚至是如何分片和分发集群中的索引(不同的分片将具有不同的术语频率)。

(可能也可能是相关的,你的例子有两个拼写“Holt”和“Holdt”。)

在任何情况下,熟悉explain功能和基础评分机制对您来说都是有用的下一步。

另外,如果您想要精确匹配词组,请阅读Phrase Matching上的ES指南。