Обратный поиск Sphinx - при добавлении нового элемента выполнять поиск по существующим сохраненным ключевым словам.

У меня есть приложение, в котором люди могут перечислять вещи для продажи / обмена / раздачи, с описаниями из 200 символов. Давайте назовем их продавцами.

Другие пользователи могут искать вещи - давайте называть их покупателями.

У меня есть система, настроенная с использованием Django, MySQL и Sphinx для текстового поиска.

Допустим, покупатель ищет "футболки". Они не получают никаких результатов, которые они хотят. Я хочу, чтобы приложение давало покупателю возможность установить флажок "Скажите, если что-то появится".

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

Очевидно, что я мог бы инициировать поиски Sphinx при каждом сохраненном поиске каждый раз, когда в списке появляется любой новый элемент (в цикле), чтобы искать совпадения, но это было бы безумно и интенсивно. Это тот эффект, которого я хочу достичь разумным путем - как я могу это сделать?

1 ответ

Вы буквально строите обратный индекс!

Сохраните результаты поиска в базах данных и создайте для них индекс.

Таким образом, футболки были бы документом в этом индексе.

Затем при отправке нового продукта вы запускаете запрос по этому индексу. Используйте синтаксис Quorum или даже match-any - чтобы получить совпадения, которые соответствуют только одному ключевому слову.

Так что в вашем примере запрос будет "Quicksilver t-shirt"/1 что означает совпадение Quicksilver ИЛИ ЖЕ t-shirt, Но то же самое относится и к гораздо более длинным заголовкам или даже ко всему описанию.

Результатом этого запроса будет список (одно слово *) оригинальных поисков, которые соответствуют. Обратите внимание, это также предполагает, что у вас есть настройки индекса для лечения - как слово чар.

  • * Обратите внимание, что это немного сложнее, если вы разрешаете более сложные запросы, множественные ключевые слова или отрицания, а также скобки ИЛИ, фразы и т. Д. Но в этом случае обратный поиск jsut дает ПОТЕНЦИАЛЬНЫЕ совпадения, поэтому вам необходимо подтвердить, что они все еще совпадают. Все еще ряд запросов, но вам не нужно запускать его на всех

Кстати, я думаю, что технический термин для этих "обратных" поисков Prospective Search http://en.wikipedia.org/wiki/Prospective_search

Другие вопросы по тегам