我有一个带有用 Painless 语言编写的自定义脚本分数的 ElasticSearch 查询。现在 ES 请求看起来像这样,自然 ES_score
完全被我脚本中的自定义评分所取代:
{
"_source": {
"excludes": [
"field_to_exclude",
]
},
"from": 0,
"size": 100,
"query": {
"script_score": {
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": [
{
"term": {
"field_to_filter": 4
}
}
]
}
},
"script": {
"lang": "painless",
"source": "COMPLEX_PAINLESS_SCRIPT"
}
}
},
"sort": [
{
"price": {
"order": "asc"
}
},
"_score"
]
}
根据前端的一些参数,我希望仍然能够单独计算 ES 自然评分,并将此自定义评分保留在另一个字段中计算,即使可能用作辅助排序标准。
这可能吗?
我终于想通了。如果您_script
在sort
数组中使用自定义字段以及_score
自然 ES 分数的字段,这实际上可以完成。
除此之外,我们可以使用script_fields
.
根据排序标准,两个 ES 请求将如下所示:
{
"_source": {
"excludes": [
"field_to_exclude",
]
},
"from": 0,
"size": 100,
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": [
{
"term": {
"field_to_filter": 4
}
}
]
}
},
"sort": [
{
"price": {
"order": "desc"
}
},
{
"_score": {
"order": "desc"
}
},
{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "COMPLEX_PAINLESS_SCRIPT"
},
"order": "desc"
}
}
],
"script_fields": {
"custom_score": {
"script": {
"lang": "painless",
"source": "COMPLEX_PAINLESS_SCRIPT"
}
}
}
}
和
{
"_source": {
"excludes": [
"field_to_exclude",
]
},
"from": 0,
"size": 100,
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": [
{
"term": {
"field_to_filter": 4
}
}
]
}
},
"sort": [
{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "COMPLEX_PAINLESS_SCRIPT"
},
"order": "desc"
}
},
{
"_score": {
"order": "desc"
}
}
],
"script_fields": {
"fit_score": {
"script": {
"lang": "painless",
"source": "COMPLEX_PAINLESS_SCRIPT"
}
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句