我正在使用 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"
}
})
提前致谢。