【问题标题】:Ranking method used by SQL Server for Fulltext indexingSQL Server 用于全文索引的排名方法
【发布时间】:2010-09-19 16:18:42
【问题描述】:

我在 SQL Server 中全文搜索使用的排名存在一些问题。

假设用户搜索两个词“foo bar”。我们假设用户打算进行 OR 搜索,所以我们将“foo OR bar”传递给我们的 CONTAINSTABLE 调用。我们发现,包含 10 次“foo”但不包含“bar”的行的排名将比同时包含“foo”和“bar”的行高得多。 我们希望具有这两个术语的行优先于仅具有一个术语的行多次。关于如何实现这一点的任何建议?

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

【问题讨论】:

    标签: sql-server full-text-search


    【解决方案1】:

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

    例如,如果 foo 的排名高于 bar,你可以这样做:

    SELECT * FROM CONTAINSTABLE (YourFullTextTable, *, 'ISABOUT("foo" WEIGHT (0.5), "bar" WEIGHT(0.3))')

    【讨论】:

      【解决方案2】:

      尝试重写查询 SELECT * FROM CONTAINSTABLE (YourFullTextTable, *, '"foo bar" or "foo" ~ "bar" or "foo or bar"') 。此查询本质上必须对任何具有精确“foo bar”>“foo”靠近“bar”> foo 或 bar 的记录进行排名

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          只是对此进行跟进.. 与字符串“A 或 B”匹配时,包含字符串 A 和 B 的行的排名较低的原因是 A 与 B 在不同的列中。如果我在将这些列合并为单个列的表,“A 或 B”的排名更符合我的预期。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-03-30
            • 1970-01-01
            • 2019-05-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-12
            相关资源
            最近更新 更多