2014-02-11 123 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匹配的許多條件以及不匹配的結果排序,但這些結果將位於搜索結果訂單的底部。有任何想法嗎 ?謝謝 –