Метод ранжирования, используемый SQL Server для полнотекстовой индексации - PullRequest
7 голосов
/ 28 октября 2008

У меня проблемы с ранжированием, используемым при полнотекстовом поиске в SQL Server.

Предположим, пользователь ищет два слова, "foo bar". Мы предполагаем, что пользователь намеревается выполнить поиск ИЛИ, поэтому мы передаем "foo OR bar" нашему вызову CONTAINSTABLE. Мы находим, что строка, которая содержит «foo» 10 раз, но не содержит «bar», будет иметь гораздо более высокий ранг, чем строка, в которой есть «foo» и «bar». Мы бы хотели, чтобы строка с обоими терминами была более предпочтительной, чем строка, содержащая только один термин несколько раз. Любой совет, как этого добиться?

Я нашел документацию, связанную с модификатором RANKMETHOD, но, похоже, она предназначена только для поиска SQL Enterprise и недоступна при обычной установке SQL Server 2005. Мы могли бы также перейти на Lucene.Net, но я надеюсь, что у него будет лучший рейтинг. Мы могли бы также выполнить несколько поисков и объединить результаты, но это кажется нежелательным, так как увеличивается количество искомых слов.

Ответы [ 4 ]

3 голосов
/ 24 декабря 2009

Попробуйте переписать запрос SELECT * FROM CONTAINSTABLE (YourFullTextTable, *, «foo bar» или «foo» ~ «bar» или «foo or bar» ') Этот запрос по сути должен ранжировать любые записи с точным "foo bar"> "foo" рядом с "bar"> foo или bar

3 голосов
/ 02 декабря 2008

RANKMETHOD недоступен для любой редакции SQL Server. Если вы строите ключевые слова для перехода в поиск CONTAINSTABLE и знаете, какие слова были более «важными», вы можете ранжировать слова с помощью ISABOUT и WEIGHT.

Например, если foo имеет более высокий ранг, чем bar, вы можете сделать что-то вроде этого:

SELECT * FROM CONTAINSTABLE (YourFullTextTable, *, 'ISABOUT (ВЕС "foo" (0.5), ВЕС "bar" (0.3)) ")

1 голос
/ 10 ноября 2008

Просто для продолжения ... Причина, по которой ранжирование было низким для строк, содержащих строки A и B при сопоставлении со строкой "A или B", заключается в том, что A находился в другом столбце, чем B. Если я создаю представление на таблица, которая объединяет эти столбцы в один столбец, рейтинг для «A или B» больше, чем я ожидал.

1 голос
/ 29 октября 2008

Я провел небольшое обсуждение по Инвертированным индексам и ранжированию косинусов (основные алгоритмы и структуры данных полнотекстовых поисковых систем). Здесь.

При чисто косинусном ранжировании foo (1), bar (1) должны быть ближе к вектору, занятому foo, bar, чем foo (10), bar (0). Можно постучать значение косинуса после, что по сути то, что делает Pagerank . Если полнотекстовый поиск влияет на косинус ранжирования после вычисления точечного произведения, а не взвешивания осей, это объясняет непропорциональное значение foo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...