我们有一个过程返回以下内容:

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),所以我不推荐使用此

    10-04 21:44
    查看更多