Я пытаюсь развернуть свою голову, когда я буду использовать анализаторы, фильтры и запросы. Я прочитал статью «Поиск в глубине» на сайте elastic.co и получил лучшее понимание, но примеры наивны для моего варианта использования и все еще немного запутанны.Понимание анализаторов, фильтров и запросов в Elasticsearch
Учитывая У меня есть документы с множеством ингредиентов, содержащий любое сочетание digestive biscuits
, biscuits
, cheese
и chocolate
, я пытаюсь выяснить, что это лучший способ, чтобы проанализировать эти данные, а также выполнять поиск по нему.
Вот простой набор документов:
[{
"ingredients": ["cheese", "chocolate"]
}, {
"ingredients": ["chocolate", "biscuits"]
}, {
"ingredients": ["cheese", "biscuits"]
}, {
"ingredients": ["chocolate", "digestive biscuits"]
}, {
"ingredients": ["cheese", "digestive biscuits"]
}, {
"ingredients": ["cheese", "chocolate", "biscuits"]
}, {
"ingredients": ["cheese", "chocolate", "digestive biscuits"]
}]
(я намеренно не смешивать biscuits
и digestive biscuits
здесь, я объясню, в мес.)
У меня есть одно поле поиска, который будет позволяют людям свободно печатать любые ингредиенты, которые они выбирают, и я в настоящее время разделяю это на пробелы, чтобы дать мне множество терминов для использования.
У меня есть отображение, как например:
{
"properties": {
"ingredients": {
"type": "string",
"analyzer": "keyword"
}
}
}
Проблемы я столкнулся здесь, что biscuits
не соответствует digestive biscuits
и biscuit
ничего не найдено.
Я знаю, что мне нужно проанализировать поле с помощью анализатора snowball
, но я очень не уверен, как это сделать.
Нужен ли мне многопольный подход? Нужно ли мне также запрашивать фильтры? Результаты, которые я хотел бы видеть, являются:
biscuit
соответствие какbiscuits
иdigestive biscuits
(причем последний набрал меньше)biscuits
соответствие какbiscuits
иdigestive biscuits
(причем последний набрал меньше)digestive
соответствиеdigestive biscuits
digestive biscuits
соответствующий сам иbiscuits
(последний заниженный нижний)
Кроме того, бросая любой другой термин в случайном порядке, как я могу справиться с этим? Использовать фильтр или запрос?
Очень озадачен тем, как структурировать это право из индекса путем сопоставления и поиска, поэтому, если у кого-нибудь есть какой-либо примерный совет, я бы очень признателен ему.
Большое спасибо! Хотя ваш ответ почти такой же, я собираюсь ответить dis_max на Evaldas Buinauskas, так как он дает мне больше возможностей для поиска. Это не означает, что это менее справедливо. – designermonkey
рад, что я мог бы помочь. 'dis_max' - это, безусловно, путь, так как он даст вам больше возможностей – ChintanShah25