anomaly-detection
anomaly-detection copied to clipboard
Exception thrown when agg query is min() on text field
Aggregation method:
{
"aggregation_name": {
"min": {
"field": "full_name"
}
}
}
GET test-index/_mapping:
{
"test-index" : {
"mappings" : {
"properties" : {
"feature-0" : {
"type" : "long"
},
"feature-1" : {
"type" : "long"
},
"feature-2" : {
"type" : "long"
},
"feature-3" : {
"type" : "long"
},
"feature-4" : {
"type" : "long"
},
"full_name" : {
"type" : "text"
},
"timestamp" : {
"type" : "date",
"format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
Exception:
com.amazon.opendistroforelasticsearch.ad.common.exception.InternalFailure: Failed to execute phase [query], all shards failed; shardFailures {[GKVjBhpGRXyucjIlGoNwoQ][test-index][0]: RemoteTransportException[[dev-dsk-yizheliu-2a-a1aecd92.us-west-2.amazon.com][127.0.0.1:9300][indices:data/read/search[phase/query]]]; nested: IllegalArgumentException[Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [full_name] in order to load field data by uninverting the inverted index. Note that this can use significant memory.]; }{[GKVjBhpGRXyucjIlGoNwoQ][test-index][1]: RemoteTransportException[[dev-dsk-yizheliu-2a-a1aecd92.us-west-2.amazon.com][127.0.0.1:9300][indices:data/read/search[phase/query]]]; nested: IllegalArgumentException[Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [full_name] in order to load field data by uninverting the inverted index. Note that this can use significant memory.]; }{[GKVjBhpGRXyucjIlGoNwoQ][test-index][2]: RemoteTransportException[[dev-dsk-yizheliu-2a-a1aecd92.us-west-2.amazon.com][127.0.0.1:9300][indices:data/read/search[phase/query]]]; nested: IllegalArgumentException[Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [full_name] in order to load field data by uninverting the inverted index. Note that this can use significant memory.]; }
at com.amazon.opendistroforelasticsearch.ad.transport.AnomalyResultTransportAction.handleExecuteException(AnomalyResultTransportAction.java:481) [opendistro-anomaly-detection-1.9.0.0.jar:1.9.0.0]
at com.amazon.opendistroforelasticsearch.ad.transport.AnomalyResultTransportAction.lambda$onFeatureResponse$5(AnomalyResultTransportAction.java:387) [opendistro-anomaly-detection-1.9.0.0.jar:1.9.0.0]
at org.elasticsearch.action.ActionListener$1.onFailure(ActionListener.java:71) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.ActionListener$1.onFailure(ActionListener.java:71) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.ActionListener$1.onFailure(ActionListener.java:71) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.support.TransportAction$1.onFailure(TransportAction.java:98) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.search.AbstractSearchAsyncAction.raisePhaseFailure(AbstractSearchAsyncAction.java:573) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.search.AbstractSearchAsyncAction.onPhaseFailure(AbstractSearchAsyncAction.java:551) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:309) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.search.AbstractSearchAsyncAction.onPhaseDone(AbstractSearchAsyncAction.java:582) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.search.AbstractSearchAsyncAction.onShardFailure(AbstractSearchAsyncAction.java:393) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.search.AbstractSearchAsyncAction.access$100(AbstractSearchAsyncAction.java:68) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.search.AbstractSearchAsyncAction$1.onFailure(AbstractSearchAsyncAction.java:245) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.search.SearchExecutionStatsCollector.onFailure(SearchExecutionStatsCollector.java:73) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.ActionListenerResponseHandler.handleException(ActionListenerResponseHandler.java:59) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.search.SearchTransportService$ConnectionCountingHandler.handleException(SearchTransportService.java:403) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.transport.TransportService$6.handleException(TransportService.java:639) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleException(TransportService.java:1173) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.transport.TransportService$DirectResponseChannel.processException(TransportService.java:1282) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.transport.TransportService$DirectResponseChannel.sendResponse(TransportService.java:1256) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.transport.TaskTransportChannel.sendResponse(TaskTransportChannel.java:60) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.support.ChannelActionListener.onFailure(ChannelActionListener.java:56) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.SearchService.lambda$runAsync$0(SearchService.java:413) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:44) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:695) [elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) [elasticsearch-7.8.0.jar:7.8.0]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) [?:?]
at java.lang.Thread.run(Thread.java:832) [?:?]
Caused by: org.elasticsearch.action.search.SearchPhaseExecutionException: all shards failed
... 22 more
Caused by: org.elasticsearch.ElasticsearchException$1: Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [full_name] in order to load field data by uninverting the inverted index. Note that this can use significant memory.
at org.elasticsearch.ElasticsearchException.guessRootCauses(ElasticsearchException.java:644) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:307) ~[elasticsearch-7.8.0.jar:7.8.0]
... 20 more
Caused by: java.lang.IllegalArgumentException: Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [full_name] in order to load field data by uninverting the inverted index. Note that this can use significant memory.
at org.elasticsearch.index.mapper.TextFieldMapper$TextFieldType.fielddataBuilder(TextFieldMapper.java:763) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.index.fielddata.IndexFieldDataService.getForField(IndexFieldDataService.java:116) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.index.query.QueryShardContext.getForField(QueryShardContext.java:227) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.support.ValuesSourceConfig.getMappingFromRegistry(ValuesSourceConfig.java:170) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.support.ValuesSourceConfig.internalResolve(ValuesSourceConfig.java:139) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.support.ValuesSourceConfig.resolve(ValuesSourceConfig.java:68) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.support.ValuesSourceAggregationBuilder.resolveConfig(ValuesSourceAggregationBuilder.java:362) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.support.ValuesSourceAggregationBuilder.doBuild(ValuesSourceAggregationBuilder.java:348) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.support.ValuesSourceAggregationBuilder$LeafOnly.doBuild(ValuesSourceAggregationBuilder.java:92) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.AbstractAggregationBuilder.build(AbstractAggregationBuilder.java:139) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.AggregatorFactories$Builder.build(AggregatorFactories.java:335) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.AggregatorFactory.<init>(AggregatorFactory.java:190) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory.<init>(ValuesSourceAggregatorFactory.java:38) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.bucket.range.AbstractRangeAggregatorFactory.<init>(AbstractRangeAggregatorFactory.java:81) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.bucket.range.DateRangeAggregatorFactory.<init>(DateRangeAggregatorFactory.java:41) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.bucket.range.DateRangeAggregationBuilder.innerBuild(DateRangeAggregationBuilder.java:330) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.bucket.range.DateRangeAggregationBuilder.innerBuild(DateRangeAggregationBuilder.java:40) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.support.ValuesSourceAggregationBuilder.doBuild(ValuesSourceAggregationBuilder.java:349) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.support.ValuesSourceAggregationBuilder.doBuild(ValuesSourceAggregationBuilder.java:43) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.AbstractAggregationBuilder.build(AbstractAggregationBuilder.java:139) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.aggregations.AggregatorFactories$Builder.build(AggregatorFactories.java:335) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.SearchService.parseSource(SearchService.java:890) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.SearchService.createContext(SearchService.java:681) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:631) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:428) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.SearchService.access$200(SearchService.java:135) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.SearchService$2.lambda$onResponse$0(SearchService.java:395) ~[elasticsearch-7.8.0.jar:7.8.0]
at org.elasticsearch.search.SearchService.lambda$runAsync$0(SearchService.java:411) ~[elasticsearch-7.8.0.jar:7.8.0]
... 6 more
[2020-08-24T17:56:07,073][INFO ][c.a.o.a.AnomalyDetectorJobRunner] [dev-dsk-yizheliu-2a-a1aecd92.us-west-2.amazon.com] Released lock for AD job jRCjInQBbrxZ6fX41VnI
Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead.
Can you paste your index mapping here? I think the exception is caused by text field.
yes. It is caused by the Text field. Mapping is pasted above.
yes. It is caused by the Text field. Mapping is pasted above.
We should add some error handling, or use Amit's validation logic to prevent creating feature with wrong field type.
Yeah. Adding to validation logic makes sense to me.