2014-02-11 126 views
2

假设我有一些产品想要搜索。太阳黑子/ solr复杂查询

我想找到一些最小值和/或最大值,如长度,宽度和高度的产品。

我可以这样做:

any_of do 

    with(:length).greater_than_or_equal_to(length_min) 
    with(:length).less_than_or_equal_to(length_max) 

    with(:width).greater_than_or_equal_to(width_min) 
    with(:width).less_than_or_equal_to(width_min) 

    with(:height).greater_than_or_equal_to(height_min) 
    with(:height).less_than_or_equal_to(height_min) 
end 

这会给我匹配任何这些产品。

我想返回所有产品,但按照符合大多数标准的产品排序。

因此,例如:

产品A是所有长度范围内,宽度和高度与为第一范围,然后,仅仅长度和宽度,然后产品B,这并不匹配任何长度的匹配产品C,宽度或高度范围。

任何人都知道如何做到这一点?

非常感谢 里克

+0

我会说,你应该'排序:score',但是当我试图,这些'with'似乎并没有影响到相关性得分... – Robin

回答

0

综观上https://github.com/sunspot/sunspot的文件,似乎使用any_of do将返回的结果,如果任何项目符合任何标准。

# Posts that do not have an expired time or have not yet expired 
Post.search do 
    any_of do 
    with(:expired_at).greater_than(Time.now) 
    with(:expired_at, nil) 
    end 
end 
+0

kobaltz肯定的,但我需要返回结果按照每个procut匹配的许多条件以及不匹配的结果排序,但这些结果将位于搜索结果订单的底部。有任何想法吗 ?谢谢 –