Sphinx - 无法使用sql_attr_multi按类别过滤

时间:2012-09-04 12:20:35

标签: mysql sphinx

我正在尝试按事件索引中的类别进行过滤 - 它是多对多的关系,event_category_event_rel 是我的数据透视表。 view_event_search是一个mysql视图'denormalising' 我的活动数据。它不加入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; 'categories'是属性名称。
  2. 并且sql查询部分必须返回索引0处的文档id和过滤器值 在索引1处.Sphinx然后匹配返回到sql_query文档id的文档id。如果MVA中存在重复的文档ID(event_id),则值(event_category_id)将“附加”到该文档的值。
  3. 我误会了吗?以及如何按类别过滤? 非常感谢!

1 个答案:

答案 0 :(得分:0)

您的配置看起来很好。我怀疑你在更改配置后没有正确重建索引。

使用带有--rotate的索引器是最好的选择。

否则,关闭,搜索,重建索引,然后再次开始搜索。

(另外要检查event_id是view_event_search中的第一列,你可能有这个,但是你写的不清楚,所以只是确定)