我们有一个过程返回以下内容:
SELECT TOP 15 SearchName, AlternateName, CountryName, StateProvince, Latitude, Longitude, Type, boost + k.Rank as Rank
FROM SearchLocations
INNER JOIN CONTAINSTABLE([SearchLocations], [SearchName], @Search) AS k
ON SearchLocations.Id = k.[Key]
ORDER BY Rank DESC
基本上,它是全文搜索
[SearchLocations]
并根据全文排名和boost列对结果进行排序。问题是,当我搜索`ISABOUT(“L *” WEIGHT(1.0))'时,这将作为'L'的输入提供给'@Search',类似显示高于
Los Angeles California United States
。虽然它们的提升较低,但全文搜索可为其赋予较高的排名,因为它们重复相同的单词。在不重复单词但多次具有相同子单词的地方,也会发生这种情况。如何禁用/解决此问题?
最佳答案
SQL Server使用的全文索引算法的权重非常大,可以使出现更多的文本匹配具有更好的排名(使结果匹配更高)。
从MSDN:
AFAIK该算法完全是内部算法,无法修改。
解决方法是,您可以更改索引器认为的“单词”,并使SQL Server的全文本索引器忽略单词之间的空格-因此,“L *”只能针对“Lima Provincia de Lima Peru”获得HitCount
1。现在它获得2个中的1个,因此将排名降低到您想要的位置。
如果您想尝试:View or Change Registered Filters and Word Breakers
但是那样您将失去全文搜索的大部分值(value),所以我不推荐使用此。