Комплексный запрос 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

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

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

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

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

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

Большое спасибо Рик


person Rick Moss    schedule 11.02.2014    source источник
comment
Я собирался сказать, что вы должны сортировать по :score, но когда я попробовал, эти with, похоже, не влияют на показатель релевантности...   -  person Robin    schedule 05.03.2014


Ответы (1)


Из документации на 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
person kobaltz    schedule 11.02.2014
comment
kobaltz да, но мне нужно вернуть результаты в порядке МНОГИХ критериев, которым соответствует каждый procut, а также результаты, которые не соответствуют, но они будут в нижней части порядка результатов поиска. Любые идеи ? Благодарность - person Rick Moss; 12.02.2014