我有一个短语要与文本列匹配。我的短语有多个关键字,每个关键字与给定的权重相关联。例如,
Johnson [10] Software [5] Company [2]
我正在使用PostgreSQL全文搜索,可能会使用Thinking-Sphinx或Solr。这3个选项中是否有一个函数允许我使用不同的权重搜索每个关键字?
答案 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来影响这个因素的排名。