2

我希望能够在一个金额范围和一个特定的 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 设置为前导。结果是我获得了在该金额范围内(来自所有用户)有出价的所有订单,并且我获得了用户出价的所有订单。

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

谢谢

4

1 回答 1

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 查询中根据需要使用它们。

于 2010-01-21T13:57:35.437 回答