7

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

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

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

4

4 回答 4

3

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

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

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

于 2008-12-02T17:46:36.280 回答
3

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

于 2009-12-23T21:16:52.593 回答
1

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

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

于 2008-10-28T21:48:54.363 回答
1

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

于 2008-11-10T07:31:05.973 回答