Skip to content
This repository has been archived by the owner on Aug 2, 2022. It is now read-only.

Exception thrown when agg query is min() on text field #217

Open
yizheliu-amazon opened this issue Aug 25, 2020 · 4 comments
Open

Exception thrown when agg query is min() on text field #217

yizheliu-amazon opened this issue Aug 25, 2020 · 4 comments
Labels
bug Something isn't working

Comments

@yizheliu-amazon
Copy link
Contributor

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
@yizheliu-amazon yizheliu-amazon added the bug Something isn't working label Aug 25, 2020
@ylwu-amzn
Copy link
Contributor

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.

@yizheliu-amazon
Copy link
Contributor Author

yes. It is caused by the Text field. Mapping is pasted above.

@ylwu-amzn
Copy link
Contributor

ylwu-amzn commented Aug 25, 2020

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.

@yizheliu-amazon
Copy link
Contributor Author

Yeah. Adding to validation logic makes sense to me.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants