1

我正在使用 elasticsearch-rails gem,并且正在尝试搜索与另一个模型具有多对多关系的模型。

这是我的模型:

Customer has_and_belongs_to_many :locations

Location has_and_belongs_to_many :customers

我知道 ES 不支持多对多关联,所以我相信我应该能够为每个客户文档索引一个关联位置 ID 的数组。我不知道该怎么做。因此,我希望能够搜索客户数据库并设置过滤器,以便仅搜索与特定位置关联的客户。

我目前没有任何映射。这主要是我需要帮助的地方。

这是我使用以前的项目构建的查询,该项目正确处理了产品数据库的过滤。除了按相关位置过滤外,我想在这里做同样的事情。

    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"
         }
       })

提前致谢。

4

0 回答 0