Многие ко многим ElasticSearch - Rails - PullRequest
0 голосов
/ 26 апреля 2018

Я использую камень упругих поисков-рельсов и пытаюсь найти модель, которая имеет отношение многие ко многим с другой моделью.

Вот мои модели:

Customer has_and_belongs_to_many :locations

Location has_and_belongs_to_many :customers

Я понимаю, что ES не поддерживает связи «многие ко многим», поэтому я считаю, что должен иметь возможность индексировать массив связанных идентификаторов местоположений для каждого документа клиента. Я не уверен, как это сделать. В результате я хочу иметь возможность выполнять поиск в базе данных клиентов и устанавливать фильтры так, чтобы я искал только клиентов, связанных с определенными местоположениями.

В настоящее время у меня нет сопоставлений. Это в основном там, где мне нужна помощь.

Вот запрос, который я построил с помощью предыдущего проекта, который правильно обрабатывал фильтрацию для базы данных продуктов. Я хочу сделать то же самое здесь, за исключением фильтрации по связанным местоположениям.

    filters = []
    #filters.push term: {"status":"Disabled"}  
    if !params[:product_type].blank?
      filters.push term: {"product_type":"#{params[:product_type]}"}   
    end 

    if !params[:category].blank?
      filters.push term: {"category":"#{params[:category]}"}   
    end 

    if !params[:brand].blank?
      filters.push term: {"brand":"#{params[:brand]}"}   
    end 

    if filters != nil
      @products = Product.search(
       query:{
         function_score:{
           query:{
             bool:{
               must:{
                 multi_match:{
                   fields: ['brand^10', '_all'],
                   query: "#{query}",
                   fuzziness: "AUTO"
                 }
               },

                 filter:{
                   bool:{
                     must:filters
                   }
                 }

             }
           },
           field_value_factor:{
              field: "popularity",
              modifier: "log1p",
              factor: 0.5

           },
           boost_mode: "sum"
         }
       })

Заранее спасибо.

...