SQL Server全文搜索,在多个字段上排名

时间:2019-01-08 16:30:29

标签: sql sql-server full-text-search

我正在尝试为图书馆构建一个非常简单的搜索引擎。

我有一个表[Tales],其中包含以下全文索引的列TITLEAUTHORGENRE

用户可以输入如下搜索词:“大卫·波特的美国战争”

我将每个单词拆分成一个以下查询:

SELECT TOP (100) 
    [title],
    [author],
    [genre],
    [TaleID],
    k.[RANK]
FROM 
    [Books].[dbo].[Tales] AS t 
INNER JOIN 
    CONTAINSTABLE([Tales] , *, '"history" OR "america" OR "war" OR "by" OR "david" OR "potter"') AS k ON t.TaleID = k.[key]
ORDER BY 
    k.[RANK] DESC

结果如下:

enter image description here

突出显示的行(第28行)应该是排名较高的行,因为它包含了用户搜索的所有单词。相反,似乎全文引擎更喜欢多次出现同一单词“ american”。

我的查询出了什么问题?

编辑:尝试使用FREETEXTTABLE,结果是相同的。但是添加更多的术语,我可以获得最正确的结果:

SELECT TOP (1000) 
    [title],
    [author],
    [genre],
    [publisher],
    [storyteller],
    [TaleID],
    k.[RANK]
FROM 
    [Books].[dbo].[Tales] AS t 
INNER JOIN 
    FREETEXTTABLE([Tales], ([title],[author],[genre]), 'history of america''s civil war by david potter') as k ON t.TaleID = k.[key]
ORDER BY
    k.[RANK] DESC;

1 个答案:

答案 0 :(得分:1)

这是排名算法和link

文档的Query with Full-Text Search

从文档中:

  

包含/包含表
  使用精确或模糊(不太精确)匹配来匹配单个单词和短语。   您还可以执行以下操作:   指定单词之间在一定距离内的接近度。   返回加权匹配。   将搜索条件与逻辑运算符结合在一起。

     

FREETEXT / FREETEXTTABLE
  匹配含义,但不准确的措词,   指定的单词,短语或句子(自由文本字符串)。   如果在词库中找到任何术语或任何术语的形式,则生成匹配项   指定列的全文本索引。