我想使用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
?
答案 0 :(得分:1)
指出here:
执行标准TS搜索,但使用“原始”中间件集(其中 不会将Sphinx结果转换为ActiveRecord对象):
php -v
所以改为这给了我原始的结果:
results = Model.search ‘foo’, :middleware =>
ThinkingSphinx::Middlewares::RAW_ONLY