喜欢各种单词,而不是重复的单词

时间:2015-11-10 14:06:05

标签: sql-server full-text-search

考虑为SQL Server中的全文搜索索引的这些记录:

ID  Content
1   'All about cars, cars, cars'
2   'My house and my car'
3   'A house is a house is a house'

当用户搜索条款" house"和"汽车"我希望记录2作为最佳结果返回,因为它似乎是他/她正在寻找的。

然而,我发现无法实现这一目标。这些查询将1和3排在2之上,因为其中一个单词重复了3次。

SELECT * FROM CONTAINSTABLE(TestTable,Content,'ISABOUT(FORMSOF(INFLECTIONAL,"car"),FORMSOF(INFLECTIONAL,"house"))')
SELECT * FROM CONTAINSTABLE(TestTable,Content,'FORMSOF(INFLECTIONAL,"car") OR FORMSOF(INFLECTIONAL,"house")')

有没有办法达到预期的行为?

2 个答案:

答案 0 :(得分:1)

您可以运行2个全文搜索 - 一个使用AND(以确保所有单词都匹配),然后使用OR进行另一个。

declare @results table (Key int, Rank int, OrderBy int)

-- get rows that match ALL keywords
INSERT @results
SELECT Key, Rank, 1
FROM CONTAINSTABLE(TestTable,Content,'FORMSOF(INFLECTIONAL,"car") AND FORMSOF(INFLECTIONAL,"house")')

-- get rows that match ANY keyword, ignoring rows already matched in the previous query
INSERT @results
SELECT Key, Rank, 2
FROM CONTAINSTABLE(TestTable,Content,'FORMSOF(INFLECTIONAL,"car") OR FORMSOF(INFLECTIONAL,"house")')
WHERE Key not in (SELECT Key FROM @results)

-- select the AND matches first, followed by the OR matches
SELECT * FROM @results
ORDER BY OrderBy, Rank

答案 1 :(得分:0)

不是单个查询,但您可以根据用户的搜索字词制作表格,加入内容,但每个搜索字词只有一次,GROUP BY搜索字词,然后选择COUNT最高的TOP行(*)

这不会使用全文搜索,但它可以带来您想要的结果。