【发布时间】:2019-09-17 12:04:24
【问题描述】:
我正在尝试搜索三个字段 name、name.ngram 和 model_number。我提升了name,所以name 上的任何匹配都高于name.ngram。但是,在某些情况下,name.ngram 与包含奇怪标点符号的术语不匹配,因此我想通过对 name 和 model_number 字段字段的模糊搜索来完成我的查询。
这是我最终想要的查询。如果我删除第二个 multi_match,则查询有效,但不包括模糊搜索。
{
explain: true,
query:{
function_score: {
"query": {
"bool": {
"should":
{
multi_match:{
fields: ["name^10", "name.ngram", "model_number"],
type: "most_fields",
query: "#{query}"
},
multi_match:{
fields: ["name", "model_number"],
type: "most_fields",
query: "#{query}",
fuzziness: "2"
}
},
"filter": {
"bool": {
"must": filters
}
}
}
},field_value_factor:{
field: "popularity",
modifier: "log1p",
factor: 5
},
boost_mode: "sum"
}
},highlight: {
fields: {
:"*" => {}
}
},
aggs: {categories: { terms: { field: "category.raw"} }}
}
我想最终像处理 ngram 一样对待模糊搜索,以便非模糊匹配排名第一,模糊匹配排名第二。如何添加允许这样做的第二个 multi_match 查询?
【问题讨论】:
标签: elasticsearch elasticsearch-rails