2013-04-19 1 views
0

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

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

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

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

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

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

ответ

2

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

Сохраните «поиск» в базах данных и создайте на нем индекс.

Так что «футболки» будут документом в этом указателе.

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

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

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

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

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

+0

Это отличный старт - благодаря особенно для правильного технического термина. Если бы мы сделали это немного сложнее, например. сохраненный поиск «большой футболки с быстрой ртутью», на определенном расстоянии от определенного местоположения lat/long. Затем, когда новое объявление публикуется с заголовком, например. «Футболка Quicksilver из Австралии - большая, синяя» Мне пришлось бы запускать запрос по этой фразе, используя кворум, но он возвратил бы несколько хитов, которые мне пришлось бы пройти. Будет ли более разумный путь, чем «грубый поиск, прекрасный поиск»? – awidgery

+0

Ну, вы можете сохранить количество слов в обратном индексе, даже с str2wordcount, а затем использовать это, чтобы повлиять на ранжирование. Например, используйте выражение ranker, чтобы продвигать результаты с hit_count, по крайней мере такие же большие, как и атрибут. Это позволяет легко исключить совпадение одного слова - во время пост-обработки. – barryhunter

 Смежные вопросы

  • Нет связанных вопросов^_^