【发布时间】:2021-01-22 18:44:13
【问题描述】:
下面是我的索引文档
{
"defaultBoostValue":1.01,
"boostDetails": [
{
"Type": "Type1",
"value": 1.0001
},
{
"Type": "Type2",
"value": 1.002
},
{
"Type": "Type3",
"value": 1.0005
}
]
}
我想根据传递的值应用 boost,所以假设我传递 Type 1,那么 boost 应用的将是 1.0001,如果 Type1 不存在,那么它将使用 defaultBoostValue 下面是我的查询,它工作但很慢,有没有办法进一步优化它
Original question 上面的查询有效,但由于我们使用 _source
很慢 {
"query": {
"function_score": {
"boost_mode": "multiply",
"functions": [
"script_score": {
"script": {
"source": """
double findBoost(Map params_copy) {
for (def group : params_copy._source.boostDetails) {
if (group['Type'] == params_copy.preferredBoostType ) {
return group['value'];
}
}
return params_copy._source['defaultBoostValue'];
}
return findBoost(params)
""",
"params": {
"preferredBoostType": "Type1"
}
}
}
}
]
}
}
}
我已经删除了没有动态映射的条件,如果更改 boostDetails 映射的结构有帮助,那我没问题,但请解释它如何帮助并更快查询如果答案包含,请给出映射类型和修改后的结构修改映射。
【问题讨论】:
标签: elasticsearch kibana elasticsearch-7