我使用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')
答案 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