一些 Thinking Sphinx 索引如何使用条件?由于某些原因,我需要这样的条件:
...
has values(:id), **where(this_value.type_id => 1)**
has values(:id), **where(this_value.type_id => 2)**
一些 Thinking Sphinx 索引如何使用条件?由于某些原因,我需要这样的条件:
...
has values(:id), **where(this_value.type_id => 1)**
has values(:id), **where(this_value.type_id => 2)**
要做这样的事情,你需要用一点 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
以下对我有用
has values(:id), as: :value_ids, type: :integer if this_value.type_id => 1
这是在
Sphinx 3.3.1
思考-sphinx 5.1.0
mySQL 8.0.23
MacOS 10.15.7