首页 > 解决方案 > Elasticsearch 数组和查询评分中的重复值

问题描述

我有两个文档,其中一个字段country可以包含重复值,例如

文件1:

country: [US, US, GB, US]

文件2:

country: [US, GB]

我需要一个查询,在查找时country:US将分配比在字段中多次出现的分数更高的分数Doc1,而Doc2US查找时它将为两个文档分配相同的分数,因为它在两个文档中出现的次数相同。这可以通过 Elasticsearch 实现吗?countryDoc1country:GB

标签: elasticsearch

解决方案


如果您在美国进行简单的匹配搜索

GET countryindex/_search
{
  "query": {
   "match": {
     "country": "US"
   }
  }
}

它将为元素的更多频率提供更高的分数,因此 [US, US, GB, US] 将获得比“[US, GB]”更高的分数如果您搜索“GB”->“[US, GB]”将获得比 [US, US, GB, US] 更多的分数,因为较短的字段长度会获得更多分数。

如果您想在匹配数相同时给出相同的分数,则需要在映射中给出norms : false 。

{
  "properties": {
    "title": {
      "type": "text",
      "norms": false
    }
  }
}

推荐阅读