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

Your configuration looks fine. I suspect you havent correctly rebuilt the index after changing the config.

using indexer with --rotate is the best option.

Otherwise, shutdown, searchd, rebuild the index, and then start searchd again.

(other thing to check that the event_id is the first column in view_event_search, you probably have this, but its not clear from what you wrote, so just making sure)

于 2012-09-04T14:07:15.860 回答