Skip to content

[BUG] index_out_of_bounds_exception when using regex include with TermsAggregation #19529

@tnguyen456

Description

@tnguyen456

Describe the bug

We've upgraded to OpenSearch 2.19 and started seeing index_out_of_bounds_exception when using regex include with TermsAggregation.

Related component

Search:Aggregations

To Reproduce

  1. Run OpenSearch 2.19.3 in docker
  2. Create sample index
curl --location --request PUT 'http://localhost:9200/test-index-1' \
--header 'Content-Type: application/json' \
--data '{
  "mappings": {
    "properties": {
      "keywordField": {
        "type": "keyword"
      }
    }
  }
}'
  1. Add a document to the index
curl --location 'http://localhost:9200/test-index-1/_doc' \
--header 'Content-Type: application/json' \
--data '{
    "keywordField" : "abc"
}'
  1. Search using regex include with TermsAggregation
curl --location --request GET 'http://localhost:9200/test-index-1/_search' \
--header 'Content-Type: application/json' \
--data '{
  "aggregations": {
    "exact": {
            "aggregations": {},
            "terms": {
                "field": "keywordField",
                "include": "va.*"
            }
        }
    }
}'
  1. See error
{
    "error": {
        "root_cause": [
            {
                "type": "index_out_of_bounds_exception",
                "reason": null
            }
        ],
        "type": "search_phase_execution_exception",
        "reason": "all shards failed",
        "phase": "query",
        "grouped": true,
        "failed_shards": [
            {
                "shard": 0,
                "index": "test-index-1",
                "node": "CWTLmuqpRAK_00gCOjx8QA",
                "reason": {
                    "type": "index_out_of_bounds_exception",
                    "reason": null
                }
            }
        ],
        "caused_by": {
            "type": "index_out_of_bounds_exception",
            "reason": null,
            "caused_by": {
                "type": "index_out_of_bounds_exception",
                "reason": null
            }
        }
    },
    "status": 500
}
 [2025-10-06T04:24:53,927][WARN ][r.suppressed             ] [0fa5ae16c921] path: /test-index-1/_search, params: {index=test-index-1}
2025-10-06 15:24:53 org.opensearch.action.search.SearchPhaseExecutionException: all shards failed
2025-10-06 15:24:53     at org.opensearch.action.search.AbstractSearchAsyncAction.onPhaseFailure(AbstractSearchAsyncAction.java:775) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:395) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.action.search.AbstractSearchAsyncAction.onPhaseDone(AbstractSearchAsyncAction.java:815) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.action.search.AbstractSearchAsyncAction.onShardFailure(AbstractSearchAsyncAction.java:548) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.action.search.AbstractSearchAsyncAction$1.onFailure(AbstractSearchAsyncAction.java:316) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.action.search.SearchExecutionStatsCollector.onFailure(SearchExecutionStatsCollector.java:104) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.action.ActionListenerResponseHandler.handleException(ActionListenerResponseHandler.java:75) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.action.search.SearchTransportService$ConnectionCountingHandler.handleException(SearchTransportService.java:766) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.transport.TransportService$9.handleException(TransportService.java:1741) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.transport.TransportService$ContextRestoreResponseHandler.handleException(TransportService.java:1527) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.transport.TransportService$DirectResponseChannel.processException(TransportService.java:1641) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.transport.TransportService$DirectResponseChannel.sendResponse(TransportService.java:1615) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.transport.TaskTransportChannel.sendResponse(TaskTransportChannel.java:81) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.transport.TransportChannel.sendErrorResponse(TransportChannel.java:75) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.action.support.ChannelActionListener.onFailure(ChannelActionListener.java:70) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.action.ActionRunnable.onFailure(ActionRunnable.java:104) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:54) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.threadpool.TaskAwareRunnable.doRun(TaskAwareRunnable.java:78) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:52) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:59) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:1014) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:52) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) [?:?]
2025-10-06 15:24:53     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) [?:?]
2025-10-06 15:24:53     at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]
2025-10-06 15:24:53 Caused by: org.opensearch.OpenSearchException$3
2025-10-06 15:24:53     at org.opensearch.OpenSearchException.guessRootCauses(OpenSearchException.java:710) ~[opensearch-core-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:393) [opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     ... 23 more
2025-10-06 15:24:53 Caused by: java.lang.IndexOutOfBoundsException
2025-10-06 15:24:53     at org.apache.lucene.codecs.lucene90.Lucene90DocValuesProducer$TermsDict.seekExact(Lucene90DocValuesProducer.java:1114) ~[lucene-core-9.12.2.jar:9.12.2 5a26234c834e4a33fd612ef8d13111ac0f0a1263 - 2025-06-17 11:16:41]
2025-10-06 15:24:53     at org.apache.lucene.codecs.lucene90.Lucene90DocValuesProducer$BaseSortedDocValues.lookupOrd(Lucene90DocValuesProducer.java:982) ~[lucene-core-9.12.2.jar:9.12.2 5a26234c834e4a33fd612ef8d13111ac0f0a1263 - 2025-06-17 11:16:41]
2025-10-06 15:24:53     at org.apache.lucene.index.SingletonSortedSetDocValues.lookupOrd(SingletonSortedSetDocValues.java:95) ~[lucene-core-9.12.2.jar:9.12.2 5a26234c834e4a33fd612ef8d13111ac0f0a1263 - 2025-06-17 11:16:41]
2025-10-06 15:24:53     at org.opensearch.search.aggregations.bucket.terms.IncludeExclude$PrefixBackedOrdinalsFilter.process(IncludeExclude.java:444) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.aggregations.bucket.terms.IncludeExclude$PrefixBackedOrdinalsFilter.acceptedGlobalOrdinals(IncludeExclude.java:480) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.aggregations.bucket.terms.GlobalOrdinalsStringTermsAggregator.<init>(GlobalOrdinalsStringTermsAggregator.java:136) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.aggregations.bucket.terms.TermsAggregatorFactory$ExecutionMode$2.create(TermsAggregatorFactory.java:502) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.aggregations.bucket.terms.TermsAggregatorFactory$1.build(TermsAggregatorFactory.java:140) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.aggregations.bucket.terms.TermsAggregatorFactory.doCreateInternal(TermsAggregatorFactory.java:310) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.aggregations.support.ValuesSourceAggregatorFactory.createInternal(ValuesSourceAggregatorFactory.java:76) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.aggregations.AggregatorFactory.create(AggregatorFactory.java:103) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.aggregations.AggregatorFactories.createTopLevelAggregators(AggregatorFactories.java:315) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.aggregations.AggregatorFactories.createTopLevelNonGlobalAggregators(AggregatorFactories.java:301) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.aggregations.AggregationCollectorManager.newCollector(AggregationCollectorManager.java:45) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.aggregations.NonGlobalAggCollectorManagerWithSingleCollector.<init>(NonGlobalAggCollectorManagerWithSingleCollector.java:33) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.aggregations.DefaultAggregationProcessor.preProcess(DefaultAggregationProcessor.java:37) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.neuralsearch.search.query.HybridAggregationProcessor.preProcess(HybridAggregationProcessor.java:32) ~[?:?]
2025-10-06 15:24:53     at org.opensearch.search.query.QueryPhase.execute(QueryPhase.java:154) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.SearchService.loadOrExecuteQueryPhase(SearchService.java:648) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.SearchService.executeQueryPhase(SearchService.java:712) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.search.SearchService$2.lambda$onResponse$0(SearchService.java:681) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.action.ActionRunnable.lambda$supply$0(ActionRunnable.java:74) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.action.ActionRunnable$2.doRun(ActionRunnable.java:89) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     at org.opensearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:52) ~[opensearch-2.19.3.jar:2.19.3]
2025-10-06 15:24:53     ... 8 more

Expected behavior

The search request should complete successfully without any bucket found.

Additional Details

Interestingly, if I change the regex to Va.* or a.*, the search works as expected.
This is not an issue in OpenSearch 2.11

Metadata

Metadata

Assignees

Type

No type

Projects

Status

🆕 New

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions