0

イベント インデックスでカテゴリ別にフィルター処理しようとしています。これは多対多の関係でevent_category_event_rel あり、ピボット テーブルです。view_event_search私のイベントデータを「非正規化」するmysqlビューです。event_categoryテーブルに参加しません。

これは私の設定です:

(...)
sql_query  = SELECT * FROM view_event_search 
             WHERE id <= (SELECT max_doc_id FROM search_indexes WHERE `index`='events_primary')

# Attribute config
sql_attr_uint      = user_id
sql_attr_timestamp = created_on
sql_attr_multi     = UINT categories FROM QUERY; SELECT event_id, event_category_id FROM event_category_event_rel ORDER BY event_id;
(...)

私は次のようにPHPと属性のフィルタリングを使用しています

$client->SetFilter('categories', array(1));

次のエラーが表示されます。

Search Error: no such filter attribute 'categories'

ここに私が理解したと思うものがあります:

  1. UINT カテゴリの FROM QUERY; 「カテゴリ」は属性名です。
  2. また、SQL クエリ部分は、インデックス 0 でドキュメント ID を返し、インデックス 1 でフィルター値を返す必要があります。Sphinx は、返されたドキュメント ID を sql_query ドキュメント ID に一致させます。MVA に重複するドキュメント ID (event_id) がある場合、値 (event_category_id) がそのドキュメントの値に「追加」されます。

私は誤解していますか?カテゴリ別にフィルタリングするにはどうすればよいですか? とても有難い!

4

1 に答える 1

0

構成は問題ないようです。構成を変更した後、インデックスを正しく再構築していないと思われます。

--rotate を指定してインデクサーを使用するのが最適なオプションです。

それ以外の場合は、シャットダウンして searchd を実行し、インデックスを再構築してから、searchd を再度開始します。

(event_id が view_event_search の最初の列であることを確認する他のこと。おそらくこれを持っていますが、あなたが書いたものからは明らかではないので、確認してください)

于 2012-09-04T14:07:15.860 に答える