Как сделать многогранный поиск в мыслях сфинксов - PullRequest
0 голосов
/ 23 сентября 2019

Использование thinking-sphinx для фасетов в моем приложении и определение двух фасетов price и year.

Я хочу получить вложенные результаты фасетов.

Теперь я получаю фасеты погод, и это дает счет против года.

years = records[:year]

Наряду с количеством записей и годом я также хочу получить минимальную цену в этом году.

Теперь я получаю это как

years.map do |year,count|
     price = Data.where(:year=>year).minimum(:price)
     {count: count,cheapest_price: price}
end

Но это как LazyLoading как N + 1 против года.Я хочу получить цены в течение года.

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 29 сентября 2019

Я думаю, этот код делает то, что вы хотите - хотя вам может понадобиться настроить вещи, чтобы получить именно то, что вы ищете:

Data.search(
  :select => "groupby() AS year, MIN(price) as min_price, count(DISTINCT sphinx_internal_id) as count",
  :group_by => :year,
  :max_matches => 1000,
  :middleware => ThinkingSphinx::Middlewares::RAW_ONLY
)

Каждый вариант объяснил:

  • select определяет соответствующие агрегации, после которых вы находитесь, а groupby() - это функция, которая ссылается на атрибут, по которому этот запрос группируется.
  • group_by указывает атрибут, который выхотите, чтобы запрос группировался.Sphinx эквивалентен GROUP BY в SQL, хотя в прошлом он был более ограниченным.
  • max_matches следует установить равным 1000, если вы не настроили его в качестве более высокого значения в конфигурации Sphinx (через config/thinking_sphinx.yml).Использование максимально возможного значения гарантирует, что результаты сканирования будут сканировать как можно больше документов.Вы также можете установить :limit в то же значение для определенного количества возвращаемых здесь строк.
  • middleware использует ограниченный набор классов промежуточного программного обеспечения Thinking Sphinx, чтобы избежать преобразования результатов в объекты ActiveRecord - вместо этого,вы получите массив хешей с данными запроса Sphinx.
...