2013-08-16 46 views
0

我有一个短语要与文本列进行匹配。我的短语有多个关键字,每个关键字与给定的权重相关联。例如,带有单个关键字权重的文本搜索

Johnson [10] Software [5] Company [2] 

我正在使用PostgreSQL全文搜索,并可能使用Thinking-Sphinx或Solr。这3个选项中是否有一个功能可以让我针对每个关键字使用不同的权重进行搜索?

回答

1

Solr允许你这样做。

您所查询的是这样的

q=(Johnson)^10 (Software)^5 (Company)^2 

注意,在你的schema.xml定义的默认运算符(AND或OR)进场这里。

1

狮身人面像(因此思维 - 狮身人面像)没有可比较的功能。

但它可以通过各种手段模拟,但要清楚,它可能会很难安装。如果这是选择产品的唯一理由,请不要选择狮身人面像。但如果你有其他理由选择狮身人面像,那么它可以为你工作。

0

我想也许你可能试图在错误的位置分配权重,因此这个问题?

您的问题意味着您可以(以某种方式)在查询级别分配权重(这对于Sphinx来说是不可能的)。我对Solr并不熟悉,但当Solr查询是“Software Company Johnson”时会发生什么情况,更重要的是,您如何动态地决定哪个是名称,哪个是类别,哪个类别是类别?对我来说似乎更加复杂。

我可以说,Sphinx非常擅长为数据库上的各个列分配权重,尤其是使用ThinkingSphinx的Rails。更有可能你应该有这个场景的名称,类别和类型字段,如果没有,我会建议你有一个。然后,您可以轻松地将权重分别命名为名称,类型和类别。这在Solr中也应该很容易完成。

0

也许在索引过程中更容易做到这一点。

事实上,你知道你的文档中的单词,你可以指数化

期间计算“因素”,所以你可以使用rank_expr来影响这个因素排名。