如何使用思考Sphinx索引的条件?出于某些原因,我需要这样的条件:
...
has values(:id), **where(this_value.type_id => 1)**
has values(:id), **where(this_value.type_id => 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