【问题标题】:How to do multi facets search in thinking sphinx rails如何在思考狮身人面像导轨中进行多方面搜索
【发布时间】:2019-09-23 11:19:55
【问题描述】:

在我的应用程序中使用thinking-sphinx 作为构面并定义两个构面priceyear

我想获取 facets 嵌套结果。

现在我正在逐年获取方面,它会逐年计算。

years = records[:year]

除了记录数和年份外,我还想获得那一年的最低价格。

现在我明白了

years.map do |year,count|
     price = Data.where(:year=>year).minimum(:price)
     {count: count,cheapest_price: price}
end

但它就像 LazyLoading 作为 N+1 对年。我想在年份方面获取价格。

有什么办法吗?

【问题讨论】:

    标签: ruby-on-rails ruby sphinx facet thinking-sphinx


    【解决方案1】:

    认为这段代码可以满足你的需求 - 尽管你可能需要调整一些东西才能得到你想要的东西:

    Data.search(
      :select => "groupby() AS year, MIN(price) as min_price, count(DISTINCT sphinx_internal_id) as count",
      :group_by => :year,
      :max_matches => 1000,
      :middleware => ThinkingSphinx::Middlewares::RAW_ONLY
    )
    

    解释每个选项:

    • select 指定您所追求的适当聚合,groupby() 是一个引用此查询分组依据的属性的函数。
    • group_by 指定您希望查询分组依据的属性。 Sphinx 相当于 SQL 中的 GROUP BY,尽管在过去它受到更多限制。
    • max_matches 应该设置为 1000,除非您在 Sphinx 配置中将其配置为更高的值(通过 config/thinking_sphinx.yml)。使用尽可能高的值可确保分面结果扫描尽可能多的文档。对于此处返回的特定行数,您还可以将 :limit 设置为相同的值。
    • middleware 使用一组有限的 Thinking Sphinx 中间件类,以避免将结果转换为 ActiveRecord 对象 - 相反,您将获得一个包含 Sphinx 查询数据的哈希数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      相关资源
      最近更新 更多