我的弹性搜索中有两个字段,即最低本地价格和最低价格。
我想根据本地或全球国家将动态值映射到运行时的第三个字段价格。
如果当地国家匹配,那么我想将最低本地价格值映射到价格字段。
如果全球国家匹配,那么我想将最低全球价格值映射到价格字段。
如果本地或全球国家/地区匹配,那么我想在价格字段上应用范围查询并将该文档提升 2.0。
注意:这不是强制过滤器或查询,如果匹配则只想提升文档。
我尝试了以下解决方案,但对我不起作用。
查询一:
$params["body"] = [
"runtime_mappings" => [
"price" => [
"type" => "double",
"script" => [
"source" => "if (params['_source']['country_en_name'] == '$country_name' ) { emit(params['_source']['lowest_local_price']); } else { emit( params['_source']['global_rates']['$country->id']['lowest_global_price']); }"
]
]
],
"query" => [
"bool" => [
"filter" => [
"range" => [ "price" => [ "gte" => $min_price]]
],
"boost" => 2.0
]
]
];
查询 2:
$params["body"] = [
"runtime_mappings" => [
"price" => [
"type" => "double",
"script" => [
"source" => "if (params['_source']['country_en_name'] == '$country_name' ) { emit(params['_source']['lowest_local_price']); } else { emit( params['_source']['global_rates']['$country->id']['lowest_global_price']); }"
]
]
],
"query" => [
"bool" => [
"filter" => [
"range" => [ "price" => [ "gte" => $min_price, "boost" => 2.0]]
],
]
]
];
他们都不为我工作,因为它可以提升文档。我知道过滤器不适用于boost,那么使用范围查询和boost进行动态字段映射的解决方案是什么?
请帮我解决这个问题。
先感谢您!