我正在尝试为图书馆构建一个非常简单的搜索引擎。
我有一个表[Tales],其中包含以下全文索引的列TITLE
,AUTHOR
和GENRE
。
用户可以输入如下搜索词:“大卫·波特的美国战争”
我将每个单词拆分成一个以下查询:
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
结果如下:
突出显示的行(第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;
答案 0 :(得分:1)
这是排名算法和link
文档的Query with Full-Text Search从文档中:
包含/包含表
使用精确或模糊(不太精确)匹配来匹配单个单词和短语。 您还可以执行以下操作: 指定单词之间在一定距离内的接近度。 返回加权匹配。 将搜索条件与逻辑运算符结合在一起。
FREETEXT / FREETEXTTABLE
匹配含义,但不准确的措词, 指定的单词,短语或句子(自由文本字符串)。 如果在词库中找到任何术语或任何术语的形式,则生成匹配项 指定列的全文本索引。