Есть проект, в котором 1,5 млн товаров, у каждого товара список свойств, товарных предложений нескольких поставщиков, в общем один товар содержит довольно много семантики для нормального поиска.
Поиск сделали на основе сфинкса (стандартный полнотекст посгресса не подошёл из-за ограничения количества полей которым можно задавать разный вес), запилили кучу отраслевой логики, чтобы поиск понимал основные понятия отрасли, в общем все работает круто, во всяком случае ничего лучше по отрасли не видел.
НО он не учится! А хочется чтобы учился.
Поиск в основном служит для обработки сметных просчетов, в систему загружаются списки до 400 позиций и система по ним подбирает нужный товар, потом человек проходится по подобранным и корректирует, если система подобрала не то что нужно, вроде все хорошо, но нужно чтобы система запоминала при корректировке запрос, чтобы потом выдавать то что нужно.
Как я это вижу: сделать отдельный индекс, куда будут падать все слова из запросов и назначить в нем максимальный балл например 50, когда будет падать первый запрос, то каждому из слов будет назначаться по 1 баллу и после того как упадет 50 запросов то часть слов будет иметь 50 баллов а часть меньше, а ошибочные запросы вообще по 1 баллу, но как быть с накоплением ошибочных запросов? ведь из 1000 запросов будет уже возможно по 20 баллов у ошибочных слов.
В общем подскажите не программисту и не математику как тут быть, как лучше сделать "умный" индекс.
sim3x, на 100 введенных позиций сфинкс отдаст 100 ответов и человек проверит все ли верно и добавит все в корзину, на основе данных корзины и нужно учить.
Создать доп. индекс или индексы где лежат помеченные документы (запросы/продукты) но без весов на конкретые термы(слова), а скорее на фичи.
Плюс индексы где лежат помеченные документы, которые совсем не подходят.
Тоесть два класса спомогательных документов, к которым так же идет запрос, если ответ однозначный, то поиск из основного индекса не происходит.
Много не известных деталей: каков поиск сам по себе: с учётом ошибок или без, транслитерация и т.д.
Какой именно движок будет выбран, синхронизация, спомогательных индексов с основным. Но это детали.
Поиск без учета ошибок, мы отключили это, оно только мешало, транслитерацию тоже не делали, работает на сфинксе.
Мы разделяем семантику на слова, цифры, словоцифры, слова сокращаем до 5 букв, цифрам и словоцифрам даем больше веса. ну и куча отраслевых правил учтено в обработке индекса и запроса.