2012-09-04 52 views
0

我想按類別在我的活動指數來過濾篩選 - 它是一個多對多的關係和event_category_event_rel 是我的數據透視表。 view_event_search是一個mysql視圖'denormalising' 我的事件數據。它不加入event_category表。獅身人面像 - 不能按類別使用sql_attr_multi

這是我的配置:

(...) 
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然後匹配返回到sql_query文檔ID的文檔ID。如果MVA中存在重複的文檔ID(event_id),則值(event_category_id)被「附加」到該文檔的值。

我誤會了嗎?以及如何按類別過濾? 非常感謝!

+0

我的問題是錯別字的許多其他地方我的系統:/每個人都有幾天,他們覺得自己像一個noob我想...很高興知道,多屬性的工作原理就像我從一開始就認爲的 - 超級有用和(現在)直觀 - 再次感謝斯芬克斯隊! –

回答

0

你的配置看起來不錯。我懷疑你在更改配置後沒有正確重建索引。

使用帶--rotate的索引器是最好的選擇。

否則,關機,searchd,重建索引,然後再次啓動searchd。

(另一件事來檢查事項標識是view_event_search第一列,你可能有這一點,但它不是從你寫的清楚,所以只是確保)

+0

感謝您的回答 - 我在這個問題上評論說我已經犯了一些錯別字:P多屬性對我來說並不那麼清楚,所以我不確定它的語法是否會導致我過早提出這個問題。 –