思维狮身人面像的一些指标的条件

时间:2013-04-26 18:57:35

标签: ruby-on-rails sphinx thinking-sphinx

如何使用思考Sphinx索引的条件?出于某些原因,我需要这样的条件:

...

has values(:id), **where(this_value.type_id => 1)**
has values(:id), **where(this_value.type_id => 2)**

2 个答案:

答案 0 :(得分:1)

要做这样的事情,你需要用一点SQL来弄清楚。有一些连接命令取决于你正在使用的数据库...首先,这是PostgreSQL的一个例子:

has "array_to_string(array_remove(array_agg(CASE WHEN values.type_id = 1 THEN values.id ELSE NULL END CASE), NULL), ',')",
  :as => :first_value_ids, :type => :integer, :multi => true

在MySQL中,它可能看起来更像这样:

has "GROUP_CONCAT((CASE WHEN values.type_id = 1 THEN values.id ELSE NULL END CASE) SEPARATOR ',')",
  :as => :first_value_ids, :type => :integer, :multi => true

如果您尚未使用Thinking Sphinx v3,则选项应为:as => :first_value_ids, :type => :multi

这些查询尚未经过测试,我建议确认它们正常工作,但理论是合理的。

此外,如果您没有以正常方式在索引定义中的任何其他位置使用值关联,则需要确保在索引定义中存在以下连接:

join values

答案 1 :(得分:0)

以下对我有用

has values(:id), as: :value_ids, type: :integer if this_value.type_id => 1

这是在

上测试的

狮身人面像 3.3.1
思维狮身人面像 5.1.0
mySQL 8.0.23
macOS 10.15.7