如何解决在Elasticsearch中按汇总字段对匹配进行排序
Elasticsearch版本:5.6.16,lucene_version:6.6.1
我想按Elasticsearch中的聚合字段对匹配进行排序。
我要排序的字段是存储桶聚合group_by_item_id中的 savings_pct 。
有没有一种方法可以将字段放入“ _source”,以便我可以在排序脚本中使用它?
请注意,查询示例中的重要位是“ group_by_item_id”,“ _ source”和“ sort”
{
"query": {
"bool": {
"must": [],"should": [],"filter": [
{
"terms": {
"item_type": [
"helmets_clothes"
]
}
}
]
}
},"aggs": {
"min_price_eur": {
"min": {
"field": "item_price_eur","missing": 0
}
},"max_price_eur": {
"max": {
"field": "item_price_eur","group_by_item_id": {
"terms": {
"field": "same_item_id","size": 100
},"aggs": {
"average_price": {
"avg": {
"field": "item_price_eur"
}
},"min_price": {
"min": {
"field": "item_price_eur"
}
},"savings_pct": {
"bucket_script": {
"buckets_path": {
"avg_price": "average_price","total_prices": "_count","min_price": "min_price"
},"script": "100-(params.min_price / params.avg_price) * 100"
}
}
}
}
},"_source": [
"item_url"
],"sort": [
{
"_script" : {
"type" : "number","script" : {
"lang": "painless","inline": "doc['prices_count'].value == 5 ? 100 - (doc['min_price_eur'].value / doc['max_price_eur'].value) * 100 : 0"
},"order" : "asc"
}
}
]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。