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

Я использовал функцию SQL Server 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')

person Hiren Khatri    schedule 06.09.2016    source источник


Ответы (1)


Вероятно, вы стали жертвой списков остановки . Убедитесь, что все слова включены в индекс с помощью следующего запроса:

SELECT * FROM sys.dm_fts_index_keywords(DB_ID('YourDB'), OBJECT_ID('tblQuestion'))

Обратите внимание, что:

Стоп-слово может быть словом, имеющим значение на определенном языке, или токеном, не имеющим лингвистического значения. Например, в английском языке такие слова, как «a», «and», «is» и «the», не включаются в полнотекстовый индекс, поскольку известно, что они бесполезны для поиска.

Если вы хотите включить все слова, даже помеченные как бесполезные, используйте следующий код:

ALTER FULLTEXT INDEX ON tblQuestion SET STOPLIST = OFF
person Paweł Dyl    schedule 06.09.2016
comment
Привет, Павел Дыль. Спасибо, чувак. Я реализовал данное вами решение, оно работает абсолютно нормально. - person Hiren Khatri; 06.09.2016