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 に答える