Как повысить релевантность термина в полнотекстовом поиске на Sql Server, как в Lucene? - PullRequest
1 голос
/ 08 декабря 2009

Я делаю типичный полнотекстовый поиск с использованием содержимого таблицы, используя 'ISABOUT (term1, term2, term3)', и хотя он поддерживает взвешивание терминов, это не то, что мне нужно. Мне нужна возможность повысить актуальность терминов, содержащихся в определенных частях текста. Например, при поиске на веб-страницах метатеги или заголовок страницы обычно взвешиваются не так, как основной текст. Хотя я не имею дело с веб-страницами, я ищу ту же функциональность. В Lucene это называется Повышение уровня поля документа . Как можно сделать это в полнотекстовом поиске на Sql Server?

Ответы [ 2 ]

1 голос
/ 09 декабря 2009

Это всего лишь мысль - возможно ли выделить ту часть, которую вы хотите повысить, и затем сложить ее вместе? У меня не было времени собрать все правильно, но, скажем, у вас есть столбец «документ» и вычисляемый столбец «заголовок», вы могли бы сделать что-то вроде этого;

with compoundResults([KEY], [RANK]) as
(
 select 
     a.[key], 
     a.[rank] *0.7 + b.[rank] * 0.3
 from FREETEXTTABLE(dbo.Docs, document, @term) a 
 inner join FREETEXTTABLE(dbo.Docs, header, @term) b
 on a.[Key] = b.[Key]
)
select * from dbo.Docs c
 LEFT OUTER JOIN compoundResults d
  ON c.TermId = d.[KEY]

Таким образом, в этом примере используется freetexttable и не onlytable, но следует отметить, что существует CTE, который выбирает взвешенный ранг, получая семь десятых от тела документа и три десятых от заголовка.

0 голосов
/ 16 декабря 2009

В SQL Server FTS не существует искомых функций, которые вам нужны.

Как выглядят ваши данные? Сработает ли расширение шаблонов ключевых слов, чтобы они соответствовали соответствующим частям документа? Что-то вроде:

ISABOUT("title ~ keyword ~ title" weight 0.8, "keyword" 0.2)
...