0

一些 Thinking Sphinx 索引如何使用条件?由于某些原因,我需要这样的条件:

...

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

2 回答 2

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
于 2013-04-28T19:52:55.933 回答
0

以下对我有用

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

于 2021-03-29T16:35:20.003 回答