elasticsearch - 带有子文档计数的Elasticsearch分数

标签 elasticsearch

我有这3个对象(3个用户有照片,每张照片都有一个类别ID)

{
    "id": 1,
    "name": "User1",
    "photos":[
        {
            "id": 1,
            "cat": 1
        },
        {
            "id": 2,
            "cat": 1
        },
        {
            "id": 3,
            "cat": 2
        }
    ]
}
{
    "id": 2,
    "name": "User2",
    "photos":[
        {
            "id": 4,
            "cat": 1
        },
        {
            "id": 5,
            "cat": 2
        },
        {
            "id": 6,
            "cat": 2
        }
    ]
}
{
    "id": 3,
    "name": "User3",
    "photos":[
        {
            "id": 7,
            "cat": 2
        },
        {
            "id": 8,
            "cat": 3
        },
        {
            "id": 9,
            "cat": 3
        }
    ]
}

我想给这些文档打一个分数(最高分为10分),具体取决于他们与cat在一起的照片数量= 1
Object1 : 2 objects with cat = 1
Object2 : 1 objects with cat = 1
Object3 : 0 objects with cat = 1

所以分数将是Object1 = 10,Object2 = 5,Object3 = 0

最佳答案

@eemp所说的话,或者如果您无法修改文档编制索引的方式和/或如果您无法修改映射,那么一种解决方案是利用 function_score query script_score 组件来访问photos数组并乘以5。具有cat == 1的元素数。

{
  "query": {
    "function_score": {
      "query": {
        "match_all": {}
      },
      "functions": [
        {
          "script_score": {
            "script": "_source.photos.findAll{return it.cat == 1}.size() * 5"
          }
        }
      ]
    }
  }
}

您将获得期望的分数,即

对象1的
  • 10
  • 对象2的
  • 5
  • 对象3的
  • 0
  • 关于elasticsearch - 带有子文档计数的Elasticsearch分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33178227/

    相关文章:

    database - 为什么从 Elasticsearch 检索数据比从 PostgreSQL 检索数据快得多?

    authentication - 限制特定仪表板中的某些 kibana 用户

    elasticsearch - 更改 Elasticsearch 映射

    使用两个字段的 Elasticsearch 日期范围查询

    java - 如何获取索引别名的映射

    ruby-on-rails - Ruby on Rails - 轮胎 - elasticsearch,如何对导入的数据进行排序?

    elasticsearch - 如何获取包含多个字段的 Elasticsearch 聚合

    filter - 将聚合限制为过滤器的结果

    elasticsearch - Elasticsearch-将Json字符串转换为XcontentBuilder

    elasticsearch - 如何在源脚本中格式化日期?