Explorar o código

ElasticSearch Terms & Date Histogram: Support 'missing' setting

Shani Elharrar %!s(int64=9) %!d(string=hai) anos
pai
achega
f121e8309d

+ 1 - 0
public/app/plugins/datasource/elasticsearch/bucket_agg.js

@@ -27,6 +27,7 @@ function (angular, _, queryDef) {
 
 
     $scope.orderByOptions = [];
     $scope.orderByOptions = [];
     $scope.bucketAggTypes = queryDef.bucketAggTypes;
     $scope.bucketAggTypes = queryDef.bucketAggTypes;
+    $scope.bucketAggTypesHash = _.indexBy(queryDef.bucketAggTypes, 'value');
     $scope.orderOptions = queryDef.orderOptions;
     $scope.orderOptions = queryDef.orderOptions;
     $scope.sizeOptions = queryDef.sizeOptions;
     $scope.sizeOptions = queryDef.sizeOptions;
 
 

+ 29 - 7
public/app/plugins/datasource/elasticsearch/partials/bucket_agg.html

@@ -57,7 +57,7 @@
 			</ul>
 			</ul>
 			<div class="clearfix"></div>
 			<div class="clearfix"></div>
 		</div>
 		</div>
-		<div class="tight-form last">
+		<div class="tight-form">
 			<ul class="tight-form-list">
 			<ul class="tight-form-list">
 				<li class="tight-form-item" style="width: 170px">
 				<li class="tight-form-item" style="width: 170px">
 					Trim edges points
 					Trim edges points
@@ -71,11 +71,23 @@
 			</ul>
 			</ul>
 			<div class="clearfix"></div>
 			<div class="clearfix"></div>
 		</div>
 		</div>
+		<div class="tight-form last">
+			<ul class="tight-form-list">
+				<li class="tight-form-item" style="width: 170px;">
+					Missing
+					<tip>The missing parameter defines how documents that are missing a value should be treated. By default they will be ignored but it is also possible to treat them as if they had a value</tip>
+				</li>
+				<li>
+					<input type="text" class="tight-form-input last" empty-to-null ng-model="agg.settings.missing" ng-blur="onChangeInternal()" spellcheck='false'>
+				</li>
+			</ul>
+			<div class="clearfix"></div>
+		</div>
 	</div>
 	</div>
 	<div class="tight-form-inner-box" ng-if="agg.type === 'terms'">
 	<div class="tight-form-inner-box" ng-if="agg.type === 'terms'">
 		<div class="tight-form">
 		<div class="tight-form">
 			<ul class="tight-form-list">
 			<ul class="tight-form-list">
-				<li class="tight-form-item" style="width: 60px">
+				<li class="tight-form-item" style="width: 100px">
 					Order
 					Order
 				</li>
 				</li>
 				<li>
 				<li>
@@ -86,7 +98,7 @@
 		</div>
 		</div>
 		<div class="tight-form">
 		<div class="tight-form">
 			<ul class="tight-form-list">
 			<ul class="tight-form-list">
-				<li class="tight-form-item" style="width: 60px">
+				<li class="tight-form-item" style="width: 100px">
 					Size
 					Size
 				</li>
 				</li>
 				<li>
 				<li>
@@ -95,9 +107,9 @@
 			</ul>
 			</ul>
 			<div class="clearfix"></div>
 			<div class="clearfix"></div>
 		</div>
 		</div>
-		<div class="tight-form last">
+		<div class="tight-form">
 			<ul class="tight-form-list">
 			<ul class="tight-form-list">
-				<li class="tight-form-item" style="width: 60px">
+				<li class="tight-form-item" style="width: 100px">
 					Order By
 					Order By
 				</li>
 				</li>
 				<li>
 				<li>
@@ -106,6 +118,18 @@
 			</ul>
 			</ul>
 			<div class="clearfix"></div>
 			<div class="clearfix"></div>
 		</div>
 		</div>
+		<div class="tight-form last">
+			<ul class="tight-form-list">
+				<li class="tight-form-item" style="width: 100px;">
+					Missing
+					<tip>The missing parameter defines how documents that are missing a value should be treated. By default they will be ignored but it is also possible to treat them as if they had a value</tip>
+				</li>
+				<li>
+					<input type="text" class="tight-form-input last" empty-to-null ng-model="agg.settings.missing" ng-blur="onChangeInternal()" spellcheck='false'>
+				</li>
+			</ul>
+			<div class="clearfix"></div>
+		</div>
 	</div>
 	</div>
 	<div class="tight-form-inner-box" ng-if="agg.type === 'filters'">
 	<div class="tight-form-inner-box" ng-if="agg.type === 'filters'">
 		<div class="tight-form" ng-repeat="filter in agg.settings.filters" ng-class="{last: $last}">
 		<div class="tight-form" ng-repeat="filter in agg.settings.filters" ng-class="{last: $last}">
@@ -129,5 +153,3 @@
 	</div>
 	</div>
 
 
 </div>
 </div>
-
-

+ 8 - 0
public/app/plugins/datasource/elasticsearch/query_builder.js

@@ -48,6 +48,10 @@ function (queryDef) {
       }
       }
     }
     }
 
 
+    if (aggDef.settings.missing) {
+      queryNode.terms.missing = aggDef.settings.missing;
+    }
+
     return queryNode;
     return queryNode;
   };
   };
 
 
@@ -67,6 +71,10 @@ function (queryDef) {
       esAgg.format = "epoch_millis";
       esAgg.format = "epoch_millis";
     }
     }
 
 
+    if (settings.missing) {
+      esAgg.missing = settings.missing;
+    }
+
     return esAgg;
     return esAgg;
   };
   };
 
 

+ 2 - 2
public/app/plugins/datasource/elasticsearch/query_def.js

@@ -20,9 +20,9 @@ function (_) {
     ],
     ],
 
 
     bucketAggTypes: [
     bucketAggTypes: [
-      {text: "Terms",           value: 'terms' },
+      {text: "Terms",           value: 'terms', supportsMissing: true },
       {text: "Filters",         value: 'filters' },
       {text: "Filters",         value: 'filters' },
-      {text: "Date Histogram",  value: 'date_histogram' },
+      {text: "Date Histogram",  value: 'date_histogram', supportsMissing: true },
     ],
     ],
 
 
     orderByOptions: [
     orderByOptions: [