[英]Searchkick aggregations for has_and_belongs_to_many
I have a Rails 5 app and I'm trying to do an aggregations search for a has_and_belongs_to_many
association. 我有一个Rails 5应用程序,我正在尝试进行聚合搜索has_and_belongs_to_many
关联。
Here is the code that I have so far: 这是我到目前为止的代码:
event.rb: event.rb:
class Event < ApplicationRecord
searchkick text_start: [:title]
has_and_belongs_to_many :services
has_and_belongs_to_many :sectors
def search_data
atributes.merge(
title: title,
description: description,
sector_name: sectors.map(&:name),
service_name: services.map(&:name)
)
end
end
events_controller.rb: events_controller.rb:
def index
query = params[:j].presence || "*"
conditions = {}
conditions[:sector] = params[:sector] if params[:sector].present?
conditions[:service] = params[:service] if params[:service].present?
conditions[:date] = params[:date] if params[:date].present?
@events = Event.search query, where: conditions, aggs: [:sector, :service, :date], order: {created_at: {order: "desc"}}, page: params[:page], per_page: 10
end
When I call Event.reindex
in the console I was expecting to to show that the sectors and services had been indexed but it doesn't work. 当我在控制台中调用Event.reindex
时,我希望显示该扇区和服务已被索引,但无法正常工作。
To be honest I'm getting quite lost and going round in circles so any help would be much appreciated. 老实说,我已经迷路了,到处乱逛,所以任何帮助将不胜感激。
This is the code that ended up working for me: 这是最终为我工作的代码:
event.rb:
def index
query = params[:j].presence || "*"
conditions = {start_date: {"gte": "now/d"}}
conditions[:sector_name] = params[:sector_name] if params[:sector_name].present?
conditions[:service_name] = params[:service_name] if params[:service_name].present?
conditions[:start_date] = params[:start_date] if params[:start_date].present?
@events = Event.search query, where: conditions, aggs: [:sector_name, :service_name], order: {start_date: {order: "asc", unmapped_type: "long"}}, page: params[:page], per_page: 10
end
events_controller.rb:
def search_data
{
title: title,
location: location,
description: description,
start_date: start_date,
sector_name: sectors.map(&:name),
service_name: services.map(&:name)
}
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.