Sql server SQL Server用于全文索引的排序方法

Sql server SQL Server用于全文索引的排序方法,sql-server,full-text-search,Sql Server,Full Text Search,我对SQL Server中全文搜索使用的排名有一些问题 假设用户搜索两个词,“foobar”。我们假设用户打算执行OR搜索,所以我们将“foo或bar”传递给CONTAINSTABLE调用。我们发现,包含“foo”10次但不包含“bar”的行的排名将比同时包含“foo”和“bar”的行高得多。 我们希望同时具有两个术语的行比仅具有一个术语多次的行更受欢迎。有没有关于如何实现这一目标的建议 我找到了与RANKMETHOD修饰符相关的文档,但这似乎仅适用于SQL企业搜索,在常规SQL Server

我对SQL Server中全文搜索使用的排名有一些问题

假设用户搜索两个词,“foobar”。我们假设用户打算执行OR搜索,所以我们将“foo或bar”传递给CONTAINSTABLE调用。我们发现,包含“foo”10次但不包含“bar”的行的排名将比同时包含“foo”和“bar”的行高得多。 我们希望同时具有两个术语的行比仅具有一个术语多次的行更受欢迎。有没有关于如何实现这一目标的建议


我找到了与RANKMETHOD修饰符相关的文档,但这似乎仅适用于SQL企业搜索,在常规SQL Server 2005安装中不可用。我们也可以切换到Lucene.Net,但我希望验证它是否有更好的排名。我们也可以进行多次搜索并合并结果,但随着搜索词数量的增加,这似乎是不可取的。

我对倒排索引和余弦排序(全文检索系统的核心算法和数据结构)进行了简短的讨论


在纯余弦排序中,foo(1),bar(1)应该比foo(10),bar(0)更接近foo,bar所占据的向量。人们可以在事后调整余弦值,这基本上就是它的作用。如果全文搜索是在计算点积而不是加权轴后篡改余弦排序,这将解释foo的不成比例的重要性。

只是为了跟进这一点。。当与字符串“A或B”匹配时,包含字符串A和B的行的排名较低的原因是A与B位于不同的列中。如果我在表上创建一个视图,将这些列合并到一个列中,“A或B”的排名比我预期的要高。

RANKMETHOD对任何版本的SQL Server都不可用。如果您正在构建要传递到CONTAINSTABLE搜索中的关键字,并且您知道哪些单词更“重要”,那么您可以使用ISABOUT和权重对这些单词进行排序

例如,如果foo的排名高于bar,则可以执行以下操作:

从CONTAINSTABLE中选择*(您的FullTextTable,*,'ISABOUT(“foo”权重(0.5),“bar”权重(0.3)))

尝试重写查询 从CONTAINSTABLE中选择*(您的FullTextTable、*、““foo-bar”或“foo”~“bar”或“foo-or-bar”)。该查询本质上必须对任何记录进行排名,并在“bar”>foo或bar附近精确显示“foo bar”>“foo”