【问题标题】:Thinking Sphinx searching search across all models : number of result per modelThinking Sphinx 在所有模型中搜索搜索:每个模型的结果数
【发布时间】:2014-01-29 21:18:09
【问题描述】:

我进行了全局搜索(涵盖所有模型)。现在,我想知道每个模型可以有多少结果。

例如,如果我的搜索返回 10 行/结果并且我有 3 个模型,是否可以知道模型 A 有 3 个,模型 B 有 2 个,模型 C 有 5 个结果?我想用它来创建图表。

更新

家庭控制器

 facets =ThinkingSphinx.facets "#{params[:name]}  #{params[:alignment]} #{params[:tvShow_id]}", 
   :star => true, 
   :with     => filters, 
   :conditions =>  { :ending_time =>  params[:ending_time], :starting_time =>  params[:starting_time]},
   :page     => params[:page],
   :per_page => 20 

 puts facets[:sphinx_internal_class]    

错误

 Parameters: {"utf8"=>"✓", "tvShow_id"=>"", "broadcast_date_from"=>"", "starting_time"=>"", "broadcast_date_to"=>"", "ending_time"=>"", "gender"=>"", "organization_id"=>"", "position_id"=>"", "alignment"=>"neutral", "commit"=>"Generate"}
 Profession Load (1.0ms)  SELECT "professions".* FROM "professions" ORDER BY name
 Organization Load (2.5ms)  SELECT "organizations".* FROM "organizations" ORDER BY name
 Position Load (2.0ms)  SELECT "positions".* FROM "positions" ORDER BY name
 TvShow Load (0.5ms)  SELECT "tv_shows".* FROM "tv_shows" ORDER BY name
 Sphinx Query (1.9ms)  SELECT * FROM `episode_core`, `episode_delta`, `organization_core`, `organization_delta`, `person_core`, `person_delta`, `position_core`, `position_delta`, `profession_core`, `profession_delta`, `segment_core`, `segment_delta`, `tv_show_core`, `tv_show_delta` WHERE MATCH('*neutral*') AND `sphinx_deleted` = 0 ORDER BY `model_order` ASC LIMIT 0, 20
 Sphinx  Found 5 results
 Position Load (0.4ms)  SELECT "positions".* FROM "positions" WHERE "positions"."id" IN (54, 142)
 Organization Load (0.4ms)  SELECT "organizations".* FROM "organizations" WHERE "organizations"."id" IN (104)
 Person Load (0.5ms)  SELECT "people".* FROM "people" WHERE "people"."id" IN (348, 1658)
 Sphinx  Retrying query "SELECT *, *, @groupby, @count FROM `episode_core`, `episode_delta`, `organization_core`, `organization_delta`, `person_core`, `person_delta`, `position_core`, `position_delta`, `profession_core`, `profession_delta`, `segment_core`, `segment_delta`, `tv_show_core`, `tv_show_delta` WHERE MATCH('*neutral*') AND `sphinx_deleted` = 0 GROUP BY `sphinx_internal_class` LIMIT 0, 20 OPTION max_matches=20; SHOW META" after error: Using the old-fashion @variables (@count, @weight, etc.) is deprecated
 Sphinx  Retrying query "SELECT *, *, @groupby, @count FROM `episode_core`, `episode_delta`, `organization_core`, `organization_delta`, `person_core`, `person_delta`, `position_core`, `position_delta`, `profession_core`, `profession_delta`, `segment_core`, `segment_delta`, `tv_show_core`, `tv_show_delta` WHERE MATCH('*neutral*') AND `sphinx_deleted` = 0 GROUP BY `sphinx_internal_class` LIMIT 0, 20 OPTION max_matches=20; SHOW META" after error: Using the old-fashion @variables (@count, @weight, etc.) is deprecated
 Sphinx Query (6.4ms)  SELECT *, *, @groupby, @count FROM `episode_core`, `episode_delta`, `organization_core`, `organization_delta`, `person_core`, `person_delta`, `position_core`, `position_delta`, `profession_core`, `profession_delta`, `segment_core`, `segment_delta`, `tv_show_core`, `tv_show_delta` WHERE MATCH('*neutral*') AND `sphinx_deleted` = 0 GROUP BY `sphinx_internal_class` LIMIT 0, 20 OPTION max_matches=20
 Completed 500 Internal Server Error in 42ms

 ThinkingSphinx::SphinxError (Using the old-fashion @variables (@count, @weight, etc.) is deprecated):
 app/controllers/home_controller.rb:92:in `index'

【问题讨论】:

    标签: ruby-on-rails-3 grouping thinking-sphinx


    【解决方案1】:

    嗯,你总是可以从搜索结果中计算出来的:

    search = ThinkingSphinx.search params[:query]
    groups = search.group_by(&:class)
    groups.each { |klass, results| puts klass.name, results.length }
    

    但是,如果您获得的结果数量大于页面大小,那么这将不起作用。更好的方法是使用构面调用:

    facets = ThinkingSphinx.facets params[:query] # takes same arguments as search
    facets[:sphinx_internal_class]
    

    【讨论】:

    • 谢谢,第一个解决方案工作正常,但第二个解决方案是我需要的,因为结果将返回数千行。但是当我尝试它时,我收到一个错误Using the old-fashion @variables (@count, @weight, etc.) is deprecated。(这是我第一次使用 TS,我可能会遗漏一些东西)。我用错误更新了我的问题
    • 您必须使用 Sphinx 2.1.2 或更高版本和 TS v3.0.6 或更早版本。您可以将 TS 升级到 v3.1.0,或者确保您使用的是 TS v3.0.6 并在发行说明中进行更改:github.com/pat/thinking-sphinx/releases/tag/v3.0.6(如果您选择 TS v3.1.0,则为github.com/pat/thinking-sphinx/releases/tag/v3.1.0)。
    • 感谢我将 TS 升级到 v3.1.0,现在错误消失了。我还有一个问题:如何访问结果中每个模型的列?在第一个选项中,我使用循环for res in results res.column_name 访问/打印它们。您如何为 facets 选项(第二个选项)做到这一点?
    • 如果您仍然想要实际的搜索结果,您还需要执行搜索调用 - facets 只提供摘要统计信息。
    猜你喜欢
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多