Sql Server 2008 R2 Полнотекстовый поиск понимать два слова и лучший рейтинг - PullRequest
2 голосов
/ 09 сентября 2011

Привет, я пытаюсь понять полнотекстовый поиск в MS Sql Server.

У меня есть простой поиск, работающий

SELECT *
FROM Product
WHERE FREETEXT (*, 'stackoverflow' );

Даже получил простой ранг.

SELECT
   *
FROM
    Product
    INNER JOIN FREETEXTTABLE ( Product , * , 'stackoverflow' ) ft ON ( Product.ProductNo = ft.[Key] )
ORDER BY
    ft.Rank DESC

Мой первый вопрос Как я могу контролировать ранг больше. Ex. Я хочу, чтобы столбец products , name давал более высокий ранг, чем столбец description , если там найдено слово для поиска. и можно ли заставить его искать только часть слова. ех.

переполнение -> возврат переполнение стека

stack -> return stackoverflow

Мой второй вопрос Как сделать так, чтобы можно было найти правильный результат при поиске после переполнения стека в двух словах. Так как у меня будет много продуктов, где некоторые пользователи будут писать его в двух словах, когда оно правильно написано в одном слове. У меня установлен диктонар для моего полнотекстового каталога, но он не помогает с поиском в двух словах.

Таблица продуктов

  • Id

  • Имя

  • Описание

1 Ответ

4 голосов
/ 11 сентября 2011

Для первой части вашего вопроса: вам нужно будет использовать 2 запроса с объединением, предоставляя собственный «вес», что-то вроде этого ...

select  [key], sum(rnk) as weightRank
from
    (
    select Rank * 2.0 as rnk, [key] from freetexttable(tableName,Title,'free text string')
    union all
    select Rank * 1.0 as rnk, [key] from freetexttable(tableName,Description,'free text string')
    ) as t
group by [key]

Вторая часть вашего вопроса:

SELECT *
FROM Product
WHERE FREETEXT(*,'FORMSOF(INFLECTIONAL, "stack", "overflow")');
...