Задача такова: есть прайс с огромным количеством товаров и к в нем же аксессуары для этих товаров. Составлен индекс по наименованиям, но поскольку наименование непосредственно товара состоит из примерно такого же количества слов, что и товаров с аксессуарами для него поиск выдает плохой результат:
Пример:
товары в прайсе:
Смартфон Apple iPhone SE 16Gb Space Gray MLLN2RU/A, серый
чехол крышка ZAKKA для iPhone 4/4S, голубой
планшетный компьютер iPhone 16Gb Gold, MKU32RU/A
При поиске "iphone" получаем чехлы и крышки в первых результатах, а хотелось бы собственно iphone.
Пробовал прикручивать модуль русской морфологии, результат не улучшился.
Подскажите, пожалуйста, как можно решить задачу, сейчас думаю в сторону синонимов, но не уверен что они помогут.
использовать на стороне приложение разные поля для названия у товара и у аксессуара - название_товара и название_аксессуара, у которых установить разный модификатор веса (boost)
разнести эти типы записей и искать их отдельно (даже если и одним запросом, и больше вес давать тем что нашлись первым способом)
предлагаю начать с того, чем еще отличаются ваши товары? откуда вы знаете что сначала надо показать смартфон? вот оттуда же узнает и система. (на этапе индексирования)
например, вы предполагаете что пользователь ищет смартфон + iphone, а не iphone. Тогда можете сразу такой запрос и составлять (только OR а не AND).
либо просто одни товары лучше и популярнее чем другие и их надо поднимать всегда? от чего это зависит? ищет ли человек в категории или глобально? как система должна понять что ему нужно? (на этапе поиска и индексирования) вот так и программируйте
Спасибо за рекомендации, остановились на бустинге по специальному полю, с величиной задаваемой вручную. Затем в планах попробовать найти алгоритм для его автоматического выставления.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.