【问题标题】:Sphinxsearch order by aggregate valueSphinxsearch 按聚合值排序
【发布时间】:2015-02-10 02:03:05
【问题描述】:

我的 sphinx.conf 中有这个查询:

sql_query  = \
SELECT c.id as cid, s.active AS subscriptionActive, c.icof, c.firma, a.textadr, \
r.textz, cc.value, cc.title, cai.description, cai.vat, cai.name, cai.address, AVG(rev.rating) as companyAverageRating \
FROM companies as c \
LEFT JOIN addresses as a ON c.icof = a.icof \
LEFT JOIN rosformaf r ON c.rosformaf = r.kodzaz \
LEFT JOIN company_contacts as cc ON c.id = cc.company_id \
LEFT JOIN company_add_info as cai ON c.id = cai.company_id \
LEFT JOIN subscriptions as s ON c.id = s.company_id \
LEFT JOIN reviews as rev ON c.id = rev.company_id \
GROUP BY c.id \

sql_attr_float = companyAverageRating
sql_attr_bool = subscriptionActive

如您所见,我需要获得具有平均评级的公司的结果。稍后我将按平均评级降序对这些公司进行排序。但是当我运行 indexer --rotate 时,它​​卡住了并且服务器正在关闭。您知道这是获取聚合值并按其排序的正确方法,还是我应该使用另一种方法?你知道我如何按聚合值排序的其他方法吗?

谢谢。

【问题讨论】:

    标签: php sql sorting group-by sphinx


    【解决方案1】:

    您的查询本身看起来不错。

    但它是一个“繁重”的查询,因此 mysql 可能会使用大量资源来尝试“运行”它。

    1. 尝试在查询上使用EXPLAIN(独立于 sphinx 运行)来查看是否缺少任何重要索引。

    2. 1234563
    3. Sphinx 支持运行Ranged Queries,它可以有效地将“大”查询分解为许多小查询。然后每个单独的查询不太可能使 mysql 过载。 http://sphinxsearch.com/docs/current.html#conf-sql-query-range

    4. 如果仍在挣扎,可以通过临时表计算平均收视率。建议先尝试范围查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-12
      • 2014-11-17
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多