Member 12586674 Ответов: 1

Sql FREETEXTTABLE не возвращает результат


Привет,
Я использовал SQL FREETEXTTABLE для поиска в столбце таблицы на основе введенных пользователем слов, таких как поисковая система, и возврата наиболее подходящих строк.
Столбец таблицы будет содержать много вопросов, и пользователь будет вводить что-то в текстовое поле (в любом порядке), и на основе того, что он набрал, мне нужно автоматически заполнить страницу поиска.
Я использовал для этого FREETEXTTABLE. Но в некоторых случаях это не работает.

Что я уже пробовал:

Если я наберу "что", он ничего не вернет.
DECLARE @query VARCHAR(50) = 'what'
SELECT TOP 10 Questions
FROM tblQuestion tq INNER JOIN FREETEXTTABLE(tblQuestion, Questions, @query) ft 
ON ( tq.ID = ft.[Key] )
ORDER BY ft.Rank DESC

но если я наберу "что есть", он вернет 10 записей.
DECLARE @query VARCHAR(50) = 'what is'
SELECT TOP 10 Questions
FROM tblQuestion tq INNER JOIN FREETEXTTABLE(tblQuestion, Questions, @query) ft 
ON ( tq.ID = ft.[Key] )
ORDER BY ft.Rank DESC

Я также попробовал CONTAINS и FREETEXT.
SELECT * FROM tblQuestion WHERE FREETEXT (Questions,'what')

Даже этот запрос вернул ноль строк.
Но этот нижеприведенный запрос вернул несколько строк.
SELECT * FROM tblQuestion  WHERE FREETEXT (Questions,'what is')


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

Спасибо.

1 Ответов

Рейтинг:
6

vani suresh

Привет ,

В sql server есть какой-то стоп-лист слов.

Вот запрос для проверки списка стоп-листов

SELECT ssw.stopword, slg.name
      FROM sys.fulltext_system_stopwords ssw
      JOIN sys.fulltext_languages slg
      ON slg.lcid = ssw.language_id
      WHERE slg.lcid =1033


Вот ссылка для более подробной информации
список стоп-слов .

Из-за стоп-листа вы получаете любые строки.

Спасибо
:)