Индекс и поиск для товаров с аксессуарами


(Ilya Shipilov) #1

Здравствуйте!

Задача такова: есть прайс с огромным количеством товаров и к в нем же аксессуары для этих товаров. Составлен индекс по наименованиям, но поскольку наименование непосредственно товара состоит из примерно такого же количества слов, что и товаров с аксессуарами для него поиск выдает плохой результат:

Пример:
товары в прайсе:

  • Смартфон Apple iPhone SE 16Gb Space Gray MLLN2RU/A, серый
  • чехол крышка ZAKKA для iPhone 4/4S, голубой
  • планшетный компьютер iPhone 16Gb Gold, MKU32RU/A

При поиске "iphone" получаем чехлы и крышки в первых результатах, а хотелось бы собственно iphone.

Пробовал прикручивать модуль русской морфологии, результат не улучшился.

Подскажите, пожалуйста, как можно решить задачу, сейчас думаю в сторону синонимов, но не уверен что они помогут.


(Yan_Work) #2

Навскидку приходит много вариантов, вы можете

  1. использовать https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-field-value-factor для установки поля в документ, которое будет влиять на скоринг
  2. использовать на стороне приложение разные поля для названия у товара и у аксессуара - название_товара и название_аксессуара, у которых установить разный модификатор веса (boost)
  3. разнести эти типы записей и искать их отдельно (даже если и одним запросом, и больше вес давать тем что нашлись первым способом)

предлагаю начать с того, чем еще отличаются ваши товары? откуда вы знаете что сначала надо показать смартфон? вот оттуда же узнает и система. (на этапе индексирования)

например, вы предполагаете что пользователь ищет смартфон + iphone, а не iphone. Тогда можете сразу такой запрос и составлять (только OR а не AND).

либо просто одни товары лучше и популярнее чем другие и их надо поднимать всегда? от чего это зависит? ищет ли человек в категории или глобально? как система должна понять что ему нужно? (на этапе поиска и индексирования) вот так и программируйте :slight_smile:


(Ilya Shipilov) #3

Спасибо за рекомендации, остановились на бустинге по специальному полю, с величиной задаваемой вручную. Затем в планах попробовать найти алгоритм для его автоматического выставления.


(system) #4