2016-09-06 4 views
2

SQL Server FREETEXTTABLEを使用して、検索エンジンのようにユーザーが入力した単語に基づいてテーブルの列を検索し、最適な一致する行を返します。SQL Server FREETEXTTABLEが結果を返さない

テーブルの列には多くの質問が含まれ、ユーザーはテキストボックスに(何らかの順序で)何かを入力し、入力した内容に基づいて検索ページに自動入力する必要があります。

私はこれにFREETEXTTABLEを使用しました。しかし、場合によっては機能しません。

「what」と入力すると何も返されません。

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 

私もCONTAINSFREETEXTを試してみました。

SELECT * 
FROM tblQuestion 
WHERE FREETEXT (Questions, 'what') 

このクエリでも0行が返されました。

しかし、この以下のクエリでは、いくつかの行が返されました。

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"、 "and"、 "is"、 "the"などの単語は には役に立たないことが知られているため、フルテキストインデックスから除外されています。

あなたはすべての単語、無用、使用次のコードとしてマークされたものも含めたい場合:

ALTER FULLTEXT INDEX ON tblQuestion SET STOPLIST = OFF 
+0

ねえパヴェルDYL おかげで男を。 私はあなたに与えられたソリューションを実装しました。 –

関連する問題