Настроить мой поиск в свободном тексте, чтобы получить правильные результаты - PullRequest
0 голосов
/ 06 марта 2012

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

Если я использую это как свой поиск в свободном тексте (с containtstable())

isabout("*redflower*" weight (.3), "*red*" weight (.2), flower weight (.1))

Я получаю Red Mason Bee Box с рангом или 172, а также получаю Wildflower Seeds - Red Campion с рангом 172. Это описание является единственным поисковым полем.Я бы подумал, что Wildflower Seeds - Red Campion должен занимать более высокое место, потому что он содержит ОБА термины, а не только один.

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

РЕДАКТИРОВАТЬ: Я также пытался:

isabout("*redflower*", "*red*" weight (.2), "*flower*" weight (.1))

, который изменил результаты на Red Mason Bee Box с рангом 21 и Wildflower Seeds - Red Campion с рангом 21.Я не понимаю, почему это произошло, потому что во втором есть оба слова, а не одно.

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Во-первых, ваше намерение в синтаксисе, по-видимому, состоит в определении суффикса term ("* flower") для корректировки ранжирования - я считаю, что природа механизма полнотекстового поиска SQL Server 2008 поддерживает префикс только термины ("wild *" изменяет рейтинг). Но я вижу, вы уже поняли это.

Во-вторых, средство разбиения по словам не разбивает слово «Wildflower» на два слова. Существует удобная табличная функция, которая позволяет вам видеть, что делает двигатель, когда он применяет свои средства разбиения по словам и парадигматические модули - sys.dm_fts_parser:

select * from sys.dm_fts_parser('"Wildflower Seeds - Red Campion"', 1033, null, 0)


group_id    phrase_id   occurrence  special_term     display_term    expansion_type source_term
----------- ----------- ----------- ---------------- --------------- -------------- --------------------------------
1           0           1           Exact Match      wildflower      0              Wildflower Seeds - Red Campion
1           0           2           Exact Match      seeds           0              Wildflower Seeds - Red Campion
1           0           3           Exact Match      red             0              Wildflower Seeds - Red Campion
1           0           4           Exact Match      campion         0              Wildflower Seeds - Red Campion

Альтернативное решение состоит в том, чтобы вручную определить расширение Thesauras от Flower до Wildflower:

<expansion>
     <sub>flower</sub>
     <sub>wildflower</sub>
</expansion>

Но это исправляет только для этого конкретного случая.

1 голос
/ 06 марта 2012

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

, т. Е. 'flower NEAR red' - в моем примере это не сработает, поскольку у вас не может быть подстановочных знаков, но я собираюсь создать обратные индексы для всехмои поля и сделать "rewolf*" NEAR der', что будет переводить на Wildflower NEAR red

...