【问题标题】:SQL Server FREETEXTTABLE not returning resultSQL Server FREETEXTTABLE 不返回结果
【发布时间】:2016-09-06 06:46:40
【问题描述】:

我使用 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

但如果我输入“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

我也试过CONTAINS和FREETEXT。

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

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

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

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

【问题讨论】:

    标签: sql sql-server freetext containstable freetexttable


    【解决方案1】:

    您可能是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
    

    【讨论】:

    • 嘿 Paweł Dyl 谢谢伙计。我已经实现了你给出的解决方案,它工作得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多