2014-02-11 2 views
2

Скажем, у меня есть некоторые продукты, которые я хочу найти.Комплексный запрос Sunspot/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 

Это даст мне продукты, которые соответствуют ни одному из них.

Я хочу вернуть все товары, но отсортированные по продуктам, которые соответствуют самым высоким критериям.

Так, например:

продукта А, который находится в пределах всей длины, ширины и высоты колеблется с первым, то Продукт C, который соответствует только длину и ширину, а затем продукт B то не соответствует ни одному из длины, ширины или высоты.

Кто-нибудь знает, как это сделать?

спасибо Rick

+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 да, но мне нужно, чтобы вернуться результаты в порядке того, как МНОГИЕ критериев, которые соответствуют каждому прокуту, а также результаты, которые не совпадали, но они будут в нижней части списка результатов поиска. есть идеи ? благодаря –

Смежные вопросы