我有一个要与文本列匹配的短语。我的短语有多个关键字,每个关键字都与给定的权重相关联。例如,
Johnson [10] Software [5] Company [2]
我正在使用 PostgreSQL 全文搜索,可能会使用 Thinking-Sphinx 或 Solr。这 3 个选项中是否有一个功能可以让我为每个关键字使用不同的权重进行搜索?
我有一个要与文本列匹配的短语。我的短语有多个关键字,每个关键字都与给定的权重相关联。例如,
Johnson [10] Software [5] Company [2]
我正在使用 PostgreSQL 全文搜索,可能会使用 Thinking-Sphinx 或 Solr。这 3 个选项中是否有一个功能可以让我为每个关键字使用不同的权重进行搜索?
Sphinx(因此 Thinking-Sphinx)没有类似的功能。
但它可以通过各种方式进行模拟,但要明确的是,设置起来可能很棘手。如果这是选择产品的唯一原因,请不要选择 sphinx。但如果你有其他理由选择狮身人面像,那么它可能适合你。
Solr 允许您执行此操作。
您的查询将如下所示
q=(Johnson)^10 (Software)^5 (Company)^2
请注意,您定义的默认运算符(AND 或 OR)在schema.xml
这里发挥作用。
也许在索引期间更容易做到这一点。
事实上,您知道文档中的单词,您可以在索引期间计算“因子”
所以你可以使用 rank_expr 来影响这个因素的排名。
我想也许你可能试图在错误的点上分配权重,所以这个问题?
您的问题意味着您可以(以某种方式)在查询级别分配权重(这对于 Sphinx 是不可能的)。我对 Solr 不熟悉,但是当查询是“Software Company Johnson”时,Solr 会发生什么,更重要的是,您如何动态确定哪个是名称、哪个是类别以及哪个是类别的类型?对我来说似乎要复杂得多。
我可以说的 Sphinx 非常擅长为数据库上的各个列分配权重,尤其是在使用 ThinkingSphinx 的 Rails 中。在这种情况下,您很可能应该有一个名称、类别和类型字段,如果没有,我建议您有一个。然后,您可以轻松地将权重分别排列为名称、类型和类别。这在 Solr 中也应该很容易实现。