gpt4 book ai didi

如果多次找到该单词,SQL ContainsTable 的排名会更高。我该如何阻止这个?

转载 作者:行者123 更新时间:2023-12-03 03:50:00 26 4
gpt4 key购买 nike

我们有一个返回此内容的过程:

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],并根据全文排名和提升列对结果进行排序。问题是,当我搜索“ISABOUT("L*"WEIGHT(1.0))”时,这就是“@Search”作为“L”的输入的内容,城市如

  • 尼日利亚拉各斯 拉各斯
  • 秘鲁利马省利马

显示位置高于美国加利福尼亚州洛杉矶。虽然它们的提升较低,但全文搜索使它们的排名更高,因为它们重复相同的单词。如果位置不重复单词但多次具有相同的子单词,也会发生这种情况。

如何禁用/解决此问题?

最佳答案

SQL Server 使用的全文索引算法的权重非常大,可以为文本匹配的出现次数越多提供更好的排名(将它们在结果中提升到更高的位置)。

来自MSDN :

CONTAINSTABLE ranking uses the following algorithm:

StatisticalWeight = Log2( ( 2 + IndexedRowCount ) / KeyRowCount )

Rank = min( MaxQueryRank, HitCount * 16 * StatisticalWeight / MaxOccurrence )

据我所知,该算法完全是内部的,无法修改。

作为一种解决方法,您可能能够更改索引器所认为的“单词”并让 SQL Server 的全文索引器忽略单词之间的空格 - 因此“L*”只会得到 针对“Lima Provincia de Lima Peru”的点击次数为 1,而不是现在的 2,从而将排名降低到您想要的位置。

如果你想尝试一下:View or Change Registered Filters and Word Breakers

但是这样您就会失去全文搜索的大部分值(value),因此我不建议这样做

关于如果多次找到该单词,SQL ContainsTable 的排名会更高。我该如何阻止这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17556541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com