我有一个查询,用户可以通过两个字段brand
和name
搜索计算机列表。我在名称字段上使用ngram搜索,以便找到类似的匹配项。我希望我的查询以某种方式工作,如果brand
列上有匹配项,我想按匹配的品牌自动过滤。假设我有一个品牌“ Walmart”,有人输入了“ Walmart自行车”。我希望该查询确保所有返回的记录都具有“ Walmart”品牌。但是,如果用户仅搜索“自行车”,那么我将不希望应用任何过滤器。这是我当前的查询,允许手动过滤,但不会自动选择过滤器。
{
query: {
function_score: {
query:{
bool: {
must: {
multi_match:{
fields: ['name^10', 'name.ngram^5',"brand.name^10", "brand.name.ngram^5"],
type: "most_fields", #was bool_prefix
query: "#{params[:q]}",
}
},
should: ranges[:must],
filter:{
bool:{
must: filters
}
}
}
},field_value_factor:{
field: "popularity",
modifier: "log1p",
factor: 1
},
boost_mode: "sum"
}
}