Как отсортировать результат Elasticsearch по вложенному полю с ключевым словом datatype? - PullRequest
0 голосов
/ 02 июля 2018

Это фрагмент моего отображения:

    "products": {
    "properties": {
        "availability_date": {
            "type": "date"
        },
        "banner": {
            "properties": {
                "id": {
                    "type": "long"
                },
                "copyright": {
                    "type": "keyword"
                },
                "url": {
                    "type": "keyword"
                }
            }
        },
        "categories": {
            "type": "nested",
            "properties": {
                "id": {
                    "type": "long"
                },
                "category_type": {
                    "type": "keyword"
                },
                "name": {
                    "type": "text"
                }
            }
        }
    }

Я хочу отсортировать результаты поиска на основе "category.name"

Я пытаюсь поразить его:

"sort":[
  {
     "categories.name":{
        "order":"asc",
        "nested_path":"categories"
     }
  }
],

Но это не работает и возвращает сообщение:

"Fielddata отключен в текстовых полях по умолчанию. Установите fielddata = true на [Categories.name], чтобы загружать fielddata в память путем инвертирования инвертированного индекса. Обратите внимание, что это может, однако, использовать значительную память. В качестве альтернативы можно использовать поле ключевого слова вместо этого. "

Итак, я меняю отображение на:

"products": {
"properties": {
    "availability_date": {
        "type": "date"
    },
    "banner": {
        "properties": {
            "id": {
                "type": "long"
            },
            "copyright": {
                "type": "keyword"
            },
            "url": {
                "type": "keyword"
            }
        }
    },
    "categories": {
        "type": "nested",
        "properties": {
            "id": {
                "type": "long"
            },
            "category_type": {
                "type": "keyword"
            },
            "name": {
                "type": "text",
                "fields": {
                    "keyword": {
                        "type": "keyword",
                        "normalizer": "sort_normalizer"
                    }
                }
            }
        }
    }
}

Как мне теперь выполнить сортировку? Я попробовал это:

"sort":[
  {
     "categories.name.keyword":{
        "order":"asc",
        "nested_path":"categories.name"
     }
  }
],

Это не работает с причиной:

"[nested] не удалось найти вложенный объект по пути [category.name]"

Некоторые другие карты работают, но дают мне несортированный результат

1 Ответ

0 голосов
/ 02 июля 2018

Вы должны использовать

 "sort":[
      {
         "categories.name.keyword":{
            "order":"asc",
            "nested_path":"categories"
         }
      }
    ],

, поскольку вложенное поле по-прежнему категории, а не категории. Name

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