elasticsearch過濾聚合(Keyword和Nested聚合),先過濾,再根據過濾結果聚合,並排序


elasticsearch分類聚合

先模糊檢索過濾后,再對結果聚合

1. 對普通字段或數組類型聚合(默認按聚合數量排序)

例子:對Keyword類型字段sponsor聚合,先進行模糊檢索,再對檢索的結果聚合

{
    "size": 0,
    "query": {
        "bool": {
            "must": {
                "wildcard": {
                    "sponsor": "*University*"
                }
            }
        }
    },
    "aggs": {
        "sponsor": {
            "terms": {
                "field": "sponsor",
                "size":100
            }
        }
    }
}
2. 對nested類型字段聚合(默認按聚合數量排序)

例子:對nested類型字段researchAreas對象的subjectName聚合,先進行模糊檢索,再對檢索的結果聚合

{
    "size": 0,
    "query": {
        "bool": {
            "must": [
                {
                    "nested": {
                        "path": "researchAreas",
                        "query": {
                            "bool": {
                                "must": {
                                    "wildcard": {
                                        "researchAreas.subjectName": "*and*"
                                    }
                                }
                            }
                        }
                    }
                }
            ]
        }
    },
    "aggs": {
        "researchAreas_aggs": {
            "nested": {
                "path": "researchAreas"
            },
            "aggs": {
                "filter_term": {
                    "filter": {
                        "wildcard": {
                            "researchAreas.subjectName": "*and*"
                        }
                    },
                    "aggs": {
                        "subjectName": {
                            "terms": {
                                "field": "researchAreas.subjectName",
                                "size": 100
                            }
                        }
                    }
                }
            }
        }
    }
}
3. 引入order對象,在例子1的基礎上,添加自主排序

例子:按聚合詞項字符串的字母順序排序

{
    "size": 0,
    "query": {
        "bool": {
            "must": {
                "wildcard": {
                    "sponsor": "*University*"
                }
            }
        }
    },
    "aggs": {
        "sponsor": {
            "terms": {
                "field": "sponsor",
                "size": 100,
                "order":{
                    "_term":"asc"
                }
            }
        }
    }
}
更多聚合操作詳情請見elasticSreach權威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/aggregations.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM