Elasticsearch: сортировка массива объектов - PullRequest
0 голосов
/ 27 июня 2018

Я новичок вasticsearch. Документы у меня выглядят примерно так:

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: []
        }
    ]
  }
}

Я пытаюсь отсортировать пользователей (имя_пользователя) по индивидуальности (например, «открытость») по «процентили»

То, что я до сих пор придумал, основано на asticsearch: вложенный тип данных и asticsearch: сортировка внутри вложенных объектов. , это код:

    "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 голосов
/ 27 июня 2018

Вы получаете эту ошибку, потому что вы можете использовать вложенные запросы только для вложенных типов. Другими словами, вам нужно объявить «индивидуальность» как тип данных nested в вашем отображении индекса, поскольку вы загружаете в него любые данные. Тип по умолчанию - object. Создание объектов nested означает, что Elasticsearch сохранит их таким образом, что связь между полями в каждом отдельном объекте не будет потеряна. Если вы этого не сделаете, то каждое поле будет встроено в индекс независимо.

Больше информации здесь: Вложенный тип данных Elasticsearch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...