Elasticsearch 7 - сортировка по настраиваемому полю свойства мультиполя - PullRequest
2 голосов
/ 28 января 2020

Я работаю над обновлением системы на работе с ES1 до ES7.

Часть реализации ES1 включала пользовательский плагин для добавления анализатора для пользовательской сортировки. Пользовательское поведение сортировки, которое мы имеем, похоже на «естественную сортировку», но расширено для работы с юридическими кодами. Например, он будет сортировать 1.1.1 до 1.10.1. Мы называем это "юридическим видом". Мы использовали этот плагин для добавления дополнительного поля .legalsort к многопольным свойствам в нашем индексе, а затем сортировали бы его по его полю при поиске.

В настоящее время я пытаюсь адаптировать основные логи c для индексации и поиска в ES7. Я пока не пытаюсь заменить плагин "Legal sort". При попытке реализовать сортировку для поисков я столкнулся с ошибкой Fielddata отключен в текстовых полях по умолчанию . Решение, которое я видел для этого, заключается в добавлении поля .keyword для любых свойств текста, которые будут использоваться для сортировки и агрегирования. Это «работает», но я не понимаю, как я могу применить нашу старую логику c сортировки на основе поля .legalsort.

Есть ли способ сортировки по полю, отличному от .keyword, который может использовать собственный анализатор, как мы могли в ES1?

1 Ответ

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

Важным аспектом является не имя вашего поля (например, * .keyword), а тип поля. Для поиска, сортировки и агрегации с точным соответствием тип поля должен быть «ключевое слово».

Если вы используете только поле legalsort для отображения, сортировки, агрегации или точного соответствия, просто измените тип с «текст» на «ключевое слово».

Если вы хотите использовать одну и ту же информацию для обеих целей, рекомендуется сделать ее многопольным. Используйте поле типа «ключевое слово» для сортировки, агрегации и точного поиска совпадений, а поле «текст» - для полнотекстового поиска.

Наличие 2 типов, доступных для 2 целей, является значительным улучшением по сравнению с единственным типом строки, который вы имели в ES 1.0. Когда вы сортировали в ES 1.0, информация, хранящаяся в инвертированном индексе, должна была быть инвертирована и хранилась в оперативной памяти. Эта структура данных была / была названа полевыми данными. Он был неограниченным и часто вызывал исключения из памяти. В новых версиях Lucene появилась альтернативная структура данных, которая находится на диске (и в кеше файловой системы) в качестве «замены» структуры данных «fielddata». Он называется do c -values ​​и позволяет сортировать огромные объемы данных, не занимая значительный объем оперативной памяти. Единственный недостаток: значения документа недоступны для анализируемого текста (поля типа текста), поэтому необходимо поле ключевого слова типа.

Вы также можете установить для параметра отображения «fielddata» значение true для своего поля legalsort. , позволяя fielddata для этого конкретного поля вернуть предыдущее поведение со всеми его недостатками

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