Sphinx:在多个字段上过滤MVA

时间:2010-01-21 09:32:52

标签: mysql search configuration filter sphinx

我希望能够在金额范围和特定的user_id上过滤我的订单 预期结果是仅获得指定用户在特定金额范围内进行出价的订单。

例如,有一个ID为1的订单。用户5对其进行投标,金额为200。 现在,如果我想过滤,我将user_id过滤器设置为5,并将数量范围过滤器设置为150-250。

如何配置sphinx以这种方式过滤?

我有以下表格:

订单:

+-------------+-----------------------+
| Field       | Type                  |
+-------------+-----------------------+
| id          | mediumint(8) unsigned |
| title       | varchar(100)          |
| description | text                  |
+-------------+-----------------------+

出价:

+--------------+-----------------------+
| Field        | Type                  |
+--------------+-----------------------+
| id           | mediumint(8) unsigned |
| order_id     | mediumint(8) unsigned |
| user_id      | mediumint(8) unsigned |
| amount       | mediumint(9)          |
+--------------+-----------------------+

我在sphinx配置中尝试了以下内容。但是我不能将user_id设置为leading。结果是,我获得了该金额范围内出价的所有订单(来自所有用户),并且我获得了用户进行出价的所有订单。

sql_attr_multi  = uint amount from query; SELECT order_id as id, amount FROM bids
sql_attr_multi  = uint user_id from query; SELECT order_id as id, user_id FROM bids

由于

1 个答案:

答案 0 :(得分:2)

将单个出价编制索引以用于此功能可能更好。

sql_query = 
  SELECT
    b.id
    b.order_id
    b.user_id
    b.amount
    o.title
    o.description
  FROM
    bid b JOIN
    order o ON b.order_id=o.id;
sql_attr_uint = order_id
sql_attr_uint = user_id
sql_attr_uint = amount

根据特定用户进行过滤:

SetFilter("user_id", array(5));

根据150到250的出价范围进行过滤:

SetFilterRange("amount", 150, 250);

根据订单ID进行过滤:

SetFilter("order_id", array(1));

可以根据需要混合和匹配这些内容,以选择您想要查看的出价。既然索引正在使用出价ID,Sphinx会将它们作为结果集返回给您,您可以在后续的MySQL查询中根据需要使用它们。