Elasticsearch:对对象数组进行排序

时间:2018-06-27 10:05:23

标签: elasticsearch

我是Elasticsearch的新手。 我的文档看起来像这样:

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提取数据,并按原样存储它。

有办法解决吗?

1 个答案:

答案 0 :(得分:0)

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

更多信息在这里: Elasticsearch Nested Datatype