使用ThinkingSphinx,如何查询最小和最大权重

时间:2017-09-11 05:35:53

标签: ruby-on-rails thinking-sphinx

我想使用min(weight())检索max(weight())ThinkingSphinx。我试过这个:

results = Work.search(
            'example', :ranker => "expr('sum((4*lcs+2*(min_hit_pos==1)+exact_hit)*user_weight)*1000+bm25*20')",
            :select => 'min(weight()) as min_weight, max(weight()) as max_weight')
results.context[:panes] << ThinkingSphinx::Panes::WeightPane

这转换为这个sphinx表达式:

SELECT min(weight()) as min_weight, max(weight()) as max_weight 
FROM `work` 
WHERE MATCH('example') 
LIMIT 0, 20 
OPTION ranker=expr('sum((4*lcs+2*(min_hit_pos==1)+exact_hit)*user_weight)*1000+bm25*20')

如果我直接针对sphinx运行上面的sphinx表达式,那么Work.search调用错误:

undefined method `constantize' for nil:NilClass

在查看代码库之后,我发现该错误与sphinx_internal_class子句中没有:select有关,而且对此,我现在明白这将是一个问题,因为ThinkingSphinx想要查询ActiveRecord

所以我的问题:

ThinkingSphinx是否可以简单地返回原始的sphinx查询结果并避免在sphinx查询后查询ActiveRecord

1 个答案:

答案 0 :(得分:1)

指出here

  

执行标准TS搜索,但使用“原始”中间件集(其中   不会将Sphinx结果转换为ActiveRecord对象):

php -v

所以改为这给了我原始的结果:

results = Model.search ‘foo’, :middleware =>
              ThinkingSphinx::Middlewares::RAW_ONLY