Postgresql 带有单个关键字权重的文本搜索

Postgresql 带有单个关键字权重的文本搜索,postgresql,solr,full-text-search,sphinx,Postgresql,Solr,Full Text Search,Sphinx,我有一个短语要与文本列匹配。我的短语有多个关键字,每个关键字都与给定的权重相关联。比如说, Johnson [10] Software [5] Company [2] 我正在使用PostgreSQL全文搜索,可能会使用Thinking Sphinx或Solr。这3个选项中是否有一个函数允许我用不同的权重搜索每个关键字?Solr允许您这样做 您的查询如下所示 q=(Johnson)^10 (Software)^5 (Company)^2 请注意,schema.xml中定义的默认运算符(AND或

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

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

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

Solr允许您这样做

您的查询如下所示

q=(Johnson)^10 (Software)^5 (Company)^2
请注意,
schema.xml
中定义的默认运算符(AND或or)在这里起作用。

Sphinx(以及Thinking Sphinx)没有类似的功能


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

我想你可能试图在错误的点上分配权重,这就是问题所在

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


Sphinx,我可以说,非常擅长为数据库中的各个列分配权重,特别是使用ThinkingSphinx的Rails。在这种情况下,您很可能应该有一个名称、类别和类型字段,如果没有,我建议您有一个。然后,您可以轻松地将权重分别按名称、类型和类别进行排序。这在Solr中也应该很容易实现。

也许在指数化过程中更容易实现

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

因此,您可以使用rank_expr通过这个因素来影响排名