LINUX.ORG.RU
ФорумAdmin

Elasticsearch - поиск по двум полям. И как один текст использовать с типом Text и кастомным аналайзером

 


0

2

Есть набор данных которые хочу запихнуть в эластик. Описание товаров - несколько абзацев на русском языке. Причем их довольно много около 250млн.

При этом сделал analyzer - с удалением стоп слов, hunspell и еще парочкой штук.

Но при этом также хочу оставить возможность искать по тексту без аналайзера просто дефалтный Text (ну может привести к одному регистру.)

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

Вопросы:

  • Какое лучшее решние проиндексировать один и тот же текст используя anaylzer и Дефолтный text Я вижу - что можно сделать просто два поля. С аналайзером и текстом. Но это же увеличит потребление оперативной памяти в два раза? И я боюсь что это также может увеличить потребление жесткого диска тоже в два раза. (один и тот же абзац будет сохраняться в исходном виде два раза для каждого из двух филдов)

  • Как искать? Ну понятно что можно по очереди сделать два запроса. Вначале к одному филду а потом к другому. (Text и analyzer). Есть ли специальные запросы которые аггрегируют в одном ответе инфу? Ну например с приоритетом.

  1. Тебе нужно загрузить одно поле, но создать multi field с разными параметрами индексации. См. https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html
  2. Сделай два запроса и соедини их через bool query. Приоритет можно выставить через boost на самих запросах
maxcom ★★★★★
()
Последнее исправление: maxcom (всего исправлений: 1)