Я использую камень упругих поисков-рельсов и пытаюсь найти модель, которая имеет отношение многие ко многим с другой моделью.
Вот мои модели:
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"
}
})
Заранее спасибо.