简体   繁体   English

has_and_belongs_to_many的Searchkick聚合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM