我正在使用 ES 7.3。我有一个包含标题、部件、型号等的产品索引。我遇到了关键字填充问题,因为某些产品可能在整个文档中多次包含相同的单词、部件或型号。
例如,型号可能在标题中出现两次,也在型号字段中出现。某些产品可能仅在标题中包含型号而不在型号字段中包含。由于该问题,这些产品难以排名。如何防止这种类型的关键字填充?这是我的代码。
字段:
fields = [
'name^10','name.ngram',
'part_number^10',
'mod_name^5',
'model_number^5',
'brand^10',
'category^5',
'product_type^5',
'search_variations^1'
]
fuzzy_fields = [
'name',
'part_number',
'mod_name',
'model_number',
'brand',
'category',
'product_type',
'search_variations'
]
询问:
{
explain: true,
query:{
function_score: {
"query": {
"bool": {
"should":
[{
multi_match:{
fields: fields,
type: "most_fields",
query: "#{query}"
}
},
{
multi_match:{
fields: fuzzy_fields,
type: "most_fields",
fuzziness: "AUTO",
query: "#{query}"
}
}],
"filter": {
"bool": {
"must": filters
}
}
}
},field_value_factor:{
field: "popularity",
modifier: "log1p",
factor: 5
},
boost_mode: "sum"
}
},highlight: {
fields: {
:"*" => {}
}
},
aggs: {categories: { terms: { field: "category.raw"} }}
}
更新
将unique
过滤器添加到我的映射中确实可以防止在同一字段上匹配重复值,但不会跨多个字段,这是我需要的。