2016-09-06 8 views
2

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

ответ

2

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

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

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

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

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

ALTER FULLTEXT INDEX ON tblQuestion SET STOPLIST = OFF 
+0

Эй Paweł DYL спасибо человек. Я реализовал решение, данное вами, его работа абсолютно прекрасна. –