elasticsearch - Elasticsearch 数组中的重复值和查询评分

标签 elasticsearch

我有两个带有字段的文档 country可以包含重复值,例如

文档 1:

country: [US, US, GB, US]

文档2:
country: [US, GB]

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

最佳答案

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

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

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

如果你想在匹配数量相同的情况下给出相同的分数,你需要给出 norms : 在您的映射中为假。
{
  "properties": {
    "title": {
      "type": "text",
      "norms": false
    }
  }
}

关于elasticsearch - Elasticsearch 数组中的重复值和查询评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58085927/

相关文章:

java - Elasticsearch 未关闭的客户端。 Tomcat 关闭后的 Activity 线程。内存使用影响?

elasticsearch - 通过 token 计数进行过滤搜索

ruby-on-rails - 搜索#search中的Rails:Elasticsearch::Transport::Transport::Errors::BadRequest

elasticsearch - 在Elasticsearch中使用非嵌套映射过滤聚合 key

elasticsearch - ElasticSearch-日期范围条件应与日期范围数组中的一项完全匹配

elasticsearch - java.lang.NoSuchFieldError : LUCENE_4_0_0 错误

c# - 在嵌套Elasticsearch中使用原始字符串创建查询

php - elasticsearch用php和curl更新文档

elasticsearch - 如何使用单个 Elastic 搜索查询进行重复数据删除和执行聚合?

java - Spring Boot 和 Elasticsearch 连接问题