赞
踩
本文属于极客时间Elasticsearch核心技术与实战学习笔记系列。
在 Terms Aggregation 的返回中有两个特殊的数值
这种情况下返回的结果不一定能准确:
Terms 不正确的案例
这里返回的错误数据是:A:12,B:6,C:4,但实际上D是3+3=6.
上面的总数=29,返回的12+6+4=22,29-22=7
Terms 聚合分析不准的原因,数据分散在多个分片上,Coordinating Node 无法获取数据全貌
原理:每次从 Shard 上额外多获取数据,提升准确率(上面的错误的例子抓取3个丢失数据)
打开 show_term_doc_count_error
shard_size 设定
调整 shard size 大小,降低 doc_count_error_upper_bound 来提升准确度
Shard Size 默认大小设定
数据准备:依赖测试数据
- DELETE my_flights
- PUT my_flights
- {
- "settings": {
- "number_of_shards": 20
- },
- "mappings" : {
- "properties" : {
- "AvgTicketPrice" : {
- "type" : "float"
- },
- "Cancelled" : {
- "type" : "boolean"
- },
- "Carrier" : {
- "type" : "keyword"
- },
- "Dest" : {
- "type" : "keyword"
- },
- "DestAirportID" : {
- "type" : "keyword"
- },
- "DestCityName" : {
- "type" : "keyword"
- },
- "DestCountry" : {
- "type" : "keyword"
- },
- "DestLocation" : {
- "type" : "geo_point"
- },
- "DestRegion" : {
- "type" : "keyword"
- },
- "DestWeather" : {
- "type" : "keyword"
- },
- "DistanceKilometers" : {
- "type" : "float"
- },
- "DistanceMiles" : {
- "type" : "float"
- },
- "FlightDelay" : {
- "type" : "boolean"
- },
- "FlightDelayMin" : {
- "type" : "integer"
- },
- "FlightDelayType" : {
- "type" : "keyword"
- },
- "FlightNum" : {
- "type" : "keyword"
- },
- "FlightTimeHour" : {
- "type" : "keyword"
- },
- "FlightTimeMin" : {
- "type" : "float"
- },
- "Origin" : {
- "type" : "keyword"
- },
- "OriginAirportID" : {
- "type" : "keyword"
- },
- "OriginCityName" : {
- "type" : "keyword"
- },
- "OriginCountry" : {
- "type" : "keyword"
- },
- "OriginLocation" : {
- "type" : "geo_point"
- },
- "OriginRegion" : {
- "type" : "keyword"
- },
- "OriginWeather" : {
- "type" : "keyword"
- },
- "dayOfWeek" : {
- "type" : "integer"
- },
- "timestamp" : {
- "type" : "date"
- }
- }
- }
- }
-
-
- POST _reindex
- {
- "source": {
- "index": "kibana_sample_data_flights"
- },
- "dest": {
- "index": "my_flights"
- }
- }

因为es7默认的主分片是1.所以doc_count_error_upper_bound是0
改变shard_size为5,错误数就下降了,改为10就为0了。
*******
注意:size是最终返回多少个buckt的数量。
shard_size是每个bucket在一个shard上取回的bucket的总数。然后,每个shard上的结果,会在coordinate节点上在做一次汇总,返回总数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。