3

我使用 SQL ServerFREETEXTTABLE函数根据用户输入的单词(如搜索引擎)在表列中进行搜索,并返回最佳匹配行。

表格列将包含许多问题,用户将在文本框中输入一些内容(以任何顺序),并且根据他输入的内容,我需要自动填充搜索页面。

我已经习惯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

但如果我输入“what is”,它会返回 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')
4

1 回答 1

3

您可能是停止名单的受害者。使用以下查询确保所有单词都包含在索引中:

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
于 2016-09-06T07:31:39.023 回答