Способы выполнения функции "связанных поисков" - PullRequest
3 голосов
/ 24 сентября 2008

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

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

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

Ответы [ 2 ]

2 голосов
/ 24 сентября 2008

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

2 голосов
/ 24 сентября 2008

Я пробовал несколько разных подходов к этому, с разной степенью успеха. В конце концов, я думаю, что лучший подход в значительной степени зависит от области поиска / тем и от того, как пользователи формируют запросы.

Ваша мысль о сохранении предыдущих поисков кажется мне разумной. Мне было бы любопытно посмотреть, как это работает на практике (я имею в виду, что самым искренним образом - есть много нюансов, которые могут привести к сбою этих методов в «реальном мире», особенно когда данных мало).

Вот несколько техник, которые я использовал в прошлом и видел в литературе:

  1. Подходы, основанные на тезаурусе: индексировать в тезаурус для каждого термина, который использовал пользователь, а затем использовать некоторую эвристику для фильтрации синонимов, чтобы показать пользователю как возможные термины поиска.
  2. Обрабатывайте и ищите на этом: Сформулируйте поисковые термины (например, с помощью Алгоритма связывания Портера , а затем используйте основанные на терминах термины вместо изначально предоставленных запросов и предоставьте пользователю возможность поиска точно заданные ими термины (или выполните обратное, сначала ищите точные термины и используйте основание для нахождения терминов, относящихся к тому же корню. Этот второй подход, очевидно, требует некоторой предварительной обработки известного словаря, или вы можете собирать термины по мере их нахождения в индексирующем термине.)
  3. Цепочка: анализ результатов, найденных по запросу пользователя, и извлечение ключевых терминов из первых N результатов ( KEA - это одна библиотека / алгоритм, на которую вы можете обратить внимание для методов извлечения ключевых слов.)
...