【问题标题】:Sphinx: Filtering MVA on multiple fieldsSphinx:在多个字段上过滤 MVA
【发布时间】:2011-01-07 15:57:36
【问题描述】:

我希望能够根据金额范围和特定 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

谢谢

【问题讨论】:

    标签: mysql search configuration filter sphinx


    【解决方案1】:

    最好将单个出价编入索引以用于此功能。

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

    【讨论】:

    • 我让它以这种方式工作。但必须创建 2 个索引。第一个索引保持原样,第二个索引在 user_id 上获取与指定用户相关的所有订单。谢谢!
    • 这就是 Sphinx 的真正魅力......您可以通过多种不同方式为您的数据建立索引,以便快速方便地访问数据的许多不同方面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    相关资源
    最近更新 更多