国产精品chinese,色综合天天综合精品网国产在线,成午夜免费视频在线观看,清纯女学生被强行糟蹋小说

    <td id="ojr13"><tr id="ojr13"><label id="ojr13"></label></tr></td>
        • <source id="ojr13"></source>
            <td id="ojr13"><ins id="ojr13"><label id="ojr13"></label></ins></td>

            Article / 文章中心

            Elasticsearch中nested聚合操作

            發(fā)布時間:2021-11-24 點擊數(shù):944

            ElasticSearch簡介(也稱ES)

            Elasticsearch 是一個分布式可擴展的實時搜索和分析引擎,一個建立在全文搜索引擎 Apache Lucene(TM) 基礎上的搜索引擎.當然 Elasticsearch 并不僅僅是 Lucene 那么簡單,它不僅包括了全文搜索功能,還可以進行以下工作:

            • 分布式實時文件存儲,并將每一個字段都編入索引,使其可以被搜索。
            • 實時分析的分布式搜索引擎。
            • 可以擴展到上百臺服務器,處理PB級別的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)。

            ElasticSearch數(shù)據(jù)類型

            一級分類 二級分類 具體類型
            基礎類型 字符串類型 string,text,keyword
            -- 整數(shù)類型 integer,long,short,byte
            -- 邏輯類型 boolean
            -- 浮點類型 double,float,half_float,scaled_float
            -- 日期類型 date
            -- 范圍類型 range
            -- 二進制類型 binary
            復合類型 數(shù)組類型 array
            -- 對象類型 object
            -- 嵌套類型 nested
            地理類型 地理坐標類型 geo_point
            -- 地理地圖 geo_shape
            特殊類型 IP類型 ip
            -- 范圍地圖 completion
            -- 令牌計數(shù)類型 token_count
            -- 附件地圖 attachment
            -- 抽取類型 percolator

            以上便是ES中的數(shù)據(jù)類型,下面便對其中的object和nested來做一個簡單的介紹。

            nested介紹

            nested就是一個嵌套對象,是object數(shù)據(jù)類型的特殊版本,它允許對象數(shù)組相互獨立地進行索引和查詢,使用時和其他類型使用基本相同,下面便是我來舉的一個例子,labels便是一個nested類型的數(shù)據(jù)

            { "settings": { "index": { "codec": "best_compression", "mapping": { "nested_fields": { "limit": "2000" }, "total_fields": { "limit": "10000" }
                  }, "refresh_interval": "1s", "number_of_shards": "2", "translog": { "flush_threshold_size": "1gb", "sync_interval": "30s", "durability": "async" }, "number_of_replicas": "1" }
              }, "mappings": { "dynamic": true, "properties": { "id": { "type": "long", "doc_values": false, "index": false }, "name": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_smart" }, "provinces": { "type": "keyword", "doc_values": false }, "city": { "type": "keyword" }, "permissionLevel": { "type": "integer", "doc_values": false, "index": false }, "status": { "type": "integer" }, "labels": { "type": "nested", "properties": { "label": { "type": "keyword" }, "classification": { "type": "keyword" }
                    }
                  }
                }
              }
            }

            當需要使用這個嵌套類型中的數(shù)據(jù)進行過濾,統(tǒng)計時我們普遍會使用這個來做一個聚合查詢,但是這個會出現(xiàn)一個問題,那便是,所聚合出來的數(shù)據(jù)只是nested對象的數(shù)據(jù),而外部主體數(shù)據(jù)并沒有聚合出來那便是一個問題

            { "size": 0, "query": { "bool": { "must": [
                    { "nested": { "path": "labels", "query": { "term": { "labels.classification": "行業(yè)" }
                        }
                      }
                    }
                  ]
                }
              }, "aggs": { "genres": { "nested": { "path": "labels" }, "aggs": { "label_agg": { "terms": { "field": "labels.label" }, "aggs": { "count_sub": { "sum": { "field": "viewCpount" }
                        }
                      }
                    }, "fll": { "filter": { "term": { "labels.classification": "行業(yè)" }
                      }, "aggs": { "label_agg2": { "terms": { "field": "labels.label" }
                        }
                      }
                    }
                  }
                }
              }
            }

            之后,通過對官網(wǎng)文檔,還有同事的討論,當對nested對象使用聚合查詢時,便需要時用reverse_nested,來回到root主體。這樣便能夠?qū)ested之外的數(shù)據(jù)來進行聚合操作了。

            { "size": 0, "query": { "bool": { "must": [
                    { "nested": { "path": "labels", "query": { "term": { "labels.classification": "c1" }
                        }
                      }
                    }
                  ]
                }
              }, "aggs": { "genres": { "nested": { "path": "labels" }, "aggs": { "fll": { "filter": { "term": { "labels.classification": "c1" }
                      }, "aggs": { "label_agg2": { "terms": { "field": "labels.label" }, "aggs": { "res": { "reverse_nested": {}, "aggs": { "count_view": { "sum": { "field": "viewCount" }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }```