【问题标题】:Elasticsearch : Sorting an array of objectsElasticsearch:对对象数组进行排序
【发布时间】:2023-06-27 11:06:02
【问题描述】:

我是弹性搜索的新手。 我的文件看起来像这样:

user_name : "test", 
piInfo: {
  profile: {
    word_count: 535,
    word_count_message: "There were 535 words in the input.",
    processed_language: "en",
    personality: [
        {
            name: "Openness",
            category: "personality",
            percentile: 0.0015293409544490655,
            children: []
        },
        {
            name: "Conscientiousness",
            category: "personality",
            percentile: 0.6803430984001135,
            children: []
        }
    ]
  }
}

我要做的是按个性(例如:“开放性”)按“百分比”对用户(用户名)进行排序

到目前为止,基于elasticsearch: Nested datatypeelasticsearch: Sorting within nested objects.,我想出的是以下代码:

    "query": {
        "nested": {
          "path": "piInfo.profile.personality",
          "query": {
            "bool": {
              "must":
                { "match": { "piInfo.profile.personality.name": "Openness" }} 
            }
          }
      }
    },
    "sort" : {
        "piInfo.profile.personality.percentile" : {
            "order" : "asc",
            "nested": {
                "path": "piInfo.profile.personality",
                "filter": {
                "match": { "piInfo.profile.personality.name": "Openness" }
                }
            }
        }
    }

我收到了这个错误:

路径[piInfo.profile.personality]下的[嵌套]嵌套对象不是嵌套类型

这是逻辑,因为我没有映射它。我从 API 获取数据并按原样存储。

有办法解决吗?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您收到该错误是因为您只能对嵌套类型使用嵌套查询。换句话说,在将任何数据加载到其中之前,您需要在索引映射中将“个性”声明为数据类型nested。默认类型为object。制作对象nested 意味着Elasticsearch 将以不丢失每个单独对象中字段之间的关系的方式存储它们。如果您不这样做,那么每个字段都会独立地构建到索引中。

    更多信息在这里: Elasticsearch Nested Datatype

    【讨论】: