Сортировка по текстовому полю вasticsearch без использования Fielddata - PullRequest
0 голосов
/ 27 января 2020

при попытке сортировки текстового поля вasticsearch 7+ выдает ошибку, что явно поле данных должно быть установлено в true. Но это связано с высокой ценой дополнительного потребления памяти. В качестве обходного пути я решил использовать нормализатор, который будет хранить текстовое поле в качестве ключевого слова. Ниже приведен нормализатор и эластичный запрос, который используется.

//field mapping: {
                    "filterable_text": {
                        "match": "S_*",
                        "mapping": {
                            "copy_to": "_text",
                            "fields": {
                                "normalize": {
                                    "type": "keyword",
                                    "normalizer": "my_normalizer"
                                },
                                "keyword": {
                                    "type": "keyword"
                                }
                            },
                            "type": "text",
                            "fielddata": true
                        }
                    }
                }
  //normalizer: "normalizer": {
                    "my_normalizer": {
                        "type": "custom",
                        "char_filter": [],
                        "filter": ["lowercase", "asciifolding"]
                    }
                }

//query: {
  "track_total_hits":false, 
  "query": {"wildcard": {"doc.S_gName.normalize": "Ami*"}},
  "from" : 0,
  "size" : 2,
  "sort" : [{
  "doc.S_gName" : {
    "order" : "desc"
  }
}]
}

Но все равно я получаю ту же ошибку. Любое предложение?

1 Ответ

0 голосов
/ 27 января 2020

Если ваши сопоставления верны, и вы проиндексировали одно и то же поле с типом текста и типом ключевого слова. Затем вы должны отсортировать по ключевому слову поле

, если у меня есть такое отображение

"mappings": {
    "properties": {
        "name": {
            "type": "text",
             "fields": {
                 "keyword": {
                      "type": "keyword"
                  }
             }
         }
     }
 }

Тогда сортировка будет

"sort" : [{
    "name.keyword" : {
        "order" : "desc"
    }
}]

, в вашем случае это будет

"sort" : [{
    "doc.S_gName.normalize" : {
        "order" : "desc"
    }
}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...