Я использую эластичный поиск 2.3. Я сохранил все атрибуты мобильных продуктов в ES после удаления всех стоп-слов (например, with, extra и т. д.)
Пример схемы для «Micromax Canvas Doodle 4 white с 8 ГБ оперативной памяти и 8 ГБ встроенной памяти»:
"_source": {
"internal_mem": "8 GB",
"color": "White",
"brand": "Micromax",
"ram": "8 GB",
"model": "Canvas Doodle 4"
}
ES имеет тысячи мобильных имен с этими функциями. Теперь мне нужно выполнить поиск по этим продуктам. Для поиска у меня есть все продукты, разбитые по атрибутам. Итак, поиск «canvas doodle 4 gb» будет:
{
"query": {
"bool": {
"should": [{
"match": {
"model": {
"query": "canvas^4 doodle",
"boost": 2
}
}
}, {
"match": {
"internal_mem": {
"query": "4 GB",
"boost": 0.2
}
}
}]
}
}
}
Мне нужен результат:
- Все продукты "холст дудл 4g" или "холст дудл" в первую очередь (отсортированы по количеству баллов)
- Затем продукты, имеющие «холст»
- потом "4g"
Правила, которые я установил:
- Модель, Бренд должны иметь более высокий приоритет по сравнению с тремя другими
- Первое слово в модели/бренде должно иметь большее значение. например Iphone, холст и т. д.
Проблемы:
Должен ли я использовать этот запрос или мне следует перейти к запросу function_score (мне также нужна пользовательская оценка)?
Как избежать результатов поиска для «4» в модели? например "4", "mini", "3g", "4g" Нужно ли отключать IDF, чтобы избежать таких результатов?
Отдать приоритет первому слову о модели/бренде? (при условии, что они более важны, например, «холст» в холсте doodle 3)
Рекомендуемые значения «повышения» для разных атрибутов?
Открыт для любых предложений/улучшений. Пожалуйста, предложите.