SQL Server FREETEXTTABLE不返回结果

时间:2016-09-06 06:46:40

标签: sql sql-server freetext containstable 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

我还尝试了CONTAINSFREETEXT

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

即使这个查询也返回零行。

但是下面的查询返回了几行。

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

1 个答案:

答案 0 :(得分:3)

您可能是stop lists的受害者。确保所有单词都包含在索引中,并带有以下查询:

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

请注意:

  

禁用词可以是具有特定语言或含义的词   可以是没有语言意义的令牌。例如,在   英语," a," "和" "是" """是   从全文索引中删除,因为它们已知无用   搜索。

如果您想要包含所有单词,即使是那些标记为无用的单词,请使用以下代码:

ALTER FULLTEXT INDEX ON tblQuestion SET STOPLIST = OFF