使用单个关键字的权重进行文本搜索

时间:2013-08-16 09:20:27

标签: postgresql solr full-text-search sphinx

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

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

我正在使用PostgreSQL全文搜索,可能会使用Thinking-Sphinx或Solr。这3个选项中是否有一个函数允许我使用不同的权重搜索每个关键字?

4 个答案:

答案 0 :(得分:1)

Solr允许你这样做。

您的查询将如下所示

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

请注意,schema.xml中定义的默认运算符(AND或OR)将在此处发挥作用。

答案 1 :(得分:1)

Sphinx(以及Thinking-Sphinx)没有相似的功能。

但它可以通过各种方式进行模拟,但要清楚,设置起来可能很棘手。如果这是挑选产品的唯一原因,请不要选择狮身人面像。但如果您有其他理由选择狮身人面像,那么它可能会为您解决。

答案 2 :(得分:0)

我想也许你可能会尝试在错误的位置分配重​​量,因此问题是什么?

你的问题意味着你可以(以某种方式)在查询级别分配权重(这对于Sphinx来说是不可能的)。我不熟悉Solr,但是当查询是"软件公司Johnson"时Solr会发生什么,更重要的是,你如何动态决定哪个是名称,哪个是类别,哪个是一种类别?对我来说似乎更复杂。

Sphinx,我可以说,非常擅长为数据库中的各个列赋予权重,尤其是使用ThinkingSphinx的Rails。很可能你应该有这个场景的名称,类别和类型字段,如果不是我建议你有一个。然后,您可以轻松地将权重按名称,类型和类别排序。这在Solr中也应该很容易实现。

答案 3 :(得分:0)

也许在索引编制过程中这样做更容易。

实际上,您知道文档中的单词,您可以在索引编制期间计算“因子”

所以你可以使用rank_expr来影响这个因素的排名。