Skip to content

Universal highlighter with weight_matches_mode throws cryptic error #101667

@benwtrent

Description

@benwtrent

Elasticsearch Version

v8.10+

Installed Plugins

No response

Java Version

bundled

OS Version

any

Problem Description

When running a kql query that searches over nested docs, universal highlighter gave a weird error:

Caused by: java.lang.IllegalArgumentException: Reader FilterLeafReader(FilterLeafReader(FilterLeafReader(FieldUsageTrackingLeafReader(reader=FilterLeafReader(_1vv(9.7.0):c1303:[diagnostics={java.vendor=Oracle Corporation, os.arch=amd64, os.version=5.10.176+, lucene.version=9.7.0, source=flush, timestamp=1698736883411, java.runtime.version=21+35-2513, os=Linux}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}] :id=5w3udydef33hjzq9jddg14koi))))) does not support caching

Steps to Reproduce

This seems to be caused when we attempt to read from some query cache when utilizing the filter reader provided by the weight_matches_mode option in the highlighter.

That reader is specifically constructed like this:

    LeafReader leafReader =
        new FilterLeafReader(_leafReader) {
          @Override
          public Terms terms(String field) throws IOException {
            if (components.getFieldMatcher().test(field)) {
              return super.terms(components.getField());
            } else {
              return super.terms(field);
            }
          }

          //  So many subclasses do this!
          // these ought to be a default or added via some intermediary like
          // "FilterTransientLeafReader" (exception on close).
          @Override
          public CacheHelper getCoreCacheHelper() {
            return null;
          }

          @Override
          public CacheHelper getReaderCacheHelper() {
            return null;
          }
        };

Logs (if relevant)

        "reason": "Reader FilterLeafReader(FilterLeafReader(FilterLeafReader(FieldUsageTrackingLeafReader(reader=FilterLeafReader(_1vv(9.7.0):c1303:[diagnostics={java.vendor=Oracle Corporation, os.arch=amd64, os.version=5.10.176+, lucene.version=9.7.0, source=flush, timestamp=1698736883411, java.runtime.version=21+35-2513, os=Linux}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}] :id=5w3udydef33hjzq9jddg14koi))))) does not support caching",
        "stack_trace": """org.elasticsearch.ElasticsearchException$1: Reader FilterLeafReader(FilterLeafReader(FilterLeafReader(FieldUsageTrackingLeafReader(reader=FilterLeafReader(_1vv(9.7.0):c1303:[diagnostics={java.vendor=Oracle Corporation, os.arch=amd64, os.version=5.10.176+, lucene.version=9.7.0, source=flush, timestamp=1698736883411, java.runtime.version=21+35-2513, os=Linux}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}] :id=5w3udydef33hjzq9jddg14koi))))) does not support caching
	at [email protected]/org.elasticsearch.ElasticsearchException.guessRootCauses(ElasticsearchException.java:667)
	at [email protected]/org.elasticsearch.action.search.SearchPhaseExecutionException.guessRootCauses(SearchPhaseExecutionException.java:150)
	at [email protected]/org.elasticsearch.ElasticsearchException.guessRootCauses(ElasticsearchException.java:649)
	at [email protected]/org.elasticsearch.ElasticsearchException.generateFailureXContent(ElasticsearchException.java:595)
	at [email protected]/org.elasticsearch.rest.RestResponse.build(RestResponse.java:176)
	at [email protected]/org.elasticsearch.rest.RestResponse.<init>(RestResponse.java:124)
	at [email protected]/org.elasticsearch.rest.RestResponse.<init>(RestResponse.java:103)
	at [email protected]/org.elasticsearch.rest.action.RestActionListener.onFailure(RestActionListener.java:55)
	at [email protected]/org.elasticsearch.rest.action.RestCancellableNodeClient$1.onFailure(RestCancellableNodeClient.java:96)
	at [email protected]/org.elasticsearch.client.internal.node.NodeClient$SafelyWrappedActionListener.onFailure(NodeClient.java:171)
	at [email protected]/org.elasticsearch.tasks.TaskManager$1.onFailure(TaskManager.java:217)
	at [email protected]/org.elasticsearch.action.ActionListenerImplementations.safeAcceptException(ActionListenerImplementations.java:62)
	at [email protected]/org.elasticsearch.action.ActionListenerImplementations.safeOnFailure(ActionListenerImplementations.java:73)
	at [email protected]/org.elasticsearch.action.DelegatingActionListener.onFailure(DelegatingActionListener.java:27)
	at [email protected]/org.elasticsearch.action.support.ContextPreservingActionListener.onFailure(ContextPreservingActionListener.java:39)
	at [email protected]/org.elasticsearch.action.ActionListenerImplementations.safeAcceptException(ActionListenerImplementations.java:62)
	at [email protected]/org.elasticsearch.action.ActionListenerImplementations.safeOnFailure(ActionListenerImplementations.java:73)
	at [email protected]/org.elasticsearch.action.DelegatingActionListener.onFailure(DelegatingActionListener.java:27)
	at [email protected]/org.elasticsearch.action.ActionListenerImplementations.safeAcceptException(ActionListenerImplementations.java:62)
	at [email protected]/org.elasticsearch.action.ActionListenerImplementations.safeOnFailure(ActionListenerImplementations.java:73)
	at [email protected]/org.elasticsearch.action.DelegatingActionListener.onFailure(DelegatingActionListener.java:27)
	at [email protected]/org.elasticsearch.action.ActionListenerImplementations$RunAfterActionListener.onFailure(ActionListenerImplementations.java:269)
	at [email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.raisePhaseFailure(AbstractSearchAsyncAction.java:752)
	at [email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.onPhaseFailure(AbstractSearchAsyncAction.java:729)
	at [email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:419)
	at [email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.onPhaseDone(AbstractSearchAsyncAction.java:761)
	at [email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction.onShardFailure(AbstractSearchAsyncAction.java:513)
	at [email protected]/org.elasticsearch.action.search.AbstractSearchAsyncAction$1.onFailure(AbstractSearchAsyncAction.java:350)
	at [email protected]/org.elasticsearch.action.ActionListenerImplementations.safeAcceptException(ActionListenerImplementations.java:62)
	at [email protected]/org.elasticsearch.action.ActionListenerImplementations.safeOnFailure(ActionListenerImplementations.java:73)
	at [email protected]/org.elasticsearch.action.DelegatingActionListener.onFailure(DelegatingActionListener.java:27)
	at [email protected]/org.elasticsearch.action.ActionListenerResponseHandler.handleException(ActionListenerResponseHandler.java:54)
	at [email protected]/org.elasticsearch.action.search.SearchTransportService$ConnectionCountingHandler.handleException(SearchTransportService.java:630)
	at [email protected]/org.elasticsearch.transport.TransportService$UnregisterChildTransportResponseHandler.handleException(TransportService.java:1707)
	at [email protected]/org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleException(TransportService.java:1424)
	at [email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.processException(TransportService.java:1560)
	at [email protected]/org.elasticsearch.transport.TransportService$DirectResponseChannel.sendResponse(TransportService.java:1535)
	at [email protected]/org.elasticsearch.transport.TaskTransportChannel.sendResponse(TaskTransportChannel.java:51)
	at [email protected]/org.elasticsearch.action.support.ChannelActionListener.onFailure(ChannelActionListener.java:37)
	at [email protected]/org.elasticsearch.action.ActionRunnable.onFailure(ActionRunnable.java:124)
	at [email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:28)
	at [email protected]/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:33)
	at [email protected]/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:983)
	at [email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.IllegalArgumentException: Reader FilterLeafReader(FilterLeafReader(FilterLeafReader(FieldUsageTrackingLeafReader(reader=FilterLeafReader(_1vv(9.7.0):c1303:[diagnostics={java.vendor=Oracle Corporation, os.arch=amd64, os.version=5.10.176+, lucene.version=9.7.0, source=flush, timestamp=1698736883411, java.runtime.version=21+35-2513, os=Linux}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}] :id=5w3udydef33hjzq9jddg14koi))))) does not support caching
	at [email protected]/org.elasticsearch.index.cache.bitset.BitsetFilterCache.getAndLoadIfNotPresent(BitsetFilterCache.java:144)
	at [email protected]/org.elasticsearch.index.cache.bitset.BitsetFilterCache$QueryWrapperBitSetProducer.getBitSet(BitsetFilterCache.java:224)
	at [email protected]/org.apache.lucene.search.join.ToParentBlockJoinQuery$BlockJoinWeight.scorerSupplier(ToParentBlockJoinQuery.java:150)
	at [email protected]/org.apache.lucene.search.join.ToParentBlockJoinQuery$BlockJoinWeight.scorer(ToParentBlockJoinQuery.java:132)
	at [email protected]/org.apache.lucene.search.join.ToParentBlockJoinQuery$BlockJoinWeight.matches(ToParentBlockJoinQuery.java:184)
	at [email protected]/org.apache.lucene.search.BooleanWeight.matches(BooleanWeight.java:134)
	at [email protected]/org.apache.lucene.search.BooleanWeight.matches(BooleanWeight.java:134)
	at [email protected]/org.apache.lucene.search.BooleanWeight.matches(BooleanWeight.java:134)
	at [email protected]/org.apache.lucene.search.BooleanWeight.matches(BooleanWeight.java:134)
	at [email protected]/org.apache.lucene.search.uhighlight.FieldOffsetStrategy.createOffsetsEnumsWeightMatcher(FieldOffsetStrategy.java:147)
	at [email protected]/org.apache.lucene.search.uhighlight.FieldOffsetStrategy.createOffsetsEnumFromReader(FieldOffsetStrategy.java:74)
	at [email protected]/org.apache.lucene.search.uhighlight.MemoryIndexOffsetStrategy.getOffsetsEnum(MemoryIndexOffsetStrategy.java:119)
	at [email protected]/org.apache.lucene.search.uhighlight.FieldHighlighter.highlightFieldForDoc(FieldHighlighter.java:80)
	at [email protected]/org.elasticsearch.lucene.search.uhighlight.CustomFieldHighlighter.highlightFieldForDoc(CustomFieldHighlighter.java:63)
	at [email protected]/org.elasticsearch.lucene.search.uhighlight.CustomUnifiedHighlighter.highlightField(CustomUnifiedHighlighter.java:147)
	at [email protected]/org.elasticsearch.search.fetch.subphase.highlight.DefaultHighlighter.highlight(DefaultHighlighter.java:81)
	at [email protected]/org.elasticsearch.search.fetch.subphase.highlight.HighlightPhase$1.process(HighlightPhase.java:69)
	at [email protected]/org.elasticsearch.search.fetch.FetchPhase$1.nextDoc(FetchPhase.java:158)
	at [email protected]/org.elasticsearch.search.fetch.FetchPhaseDocsIterator.iterate(FetchPhaseDocsIterator.java:70)
	at [email protected]/org.elasticsearch.search.fetch.FetchPhase.buildSearchHits(FetchPhase.java:164)
	at [email protected]/org.elasticsearch.search.fetch.FetchPhase.execute(FetchPhase.java:77)
	at [email protected]/org.elasticsearch.search.SearchService.executeFetchPhase(SearchService.java:708)
	at [email protected]/org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:679)
	at [email protected]/org.elasticsearch.search.SearchService.lambda$executeQueryPhase$2(SearchService.java:541)
	at [email protected]/org.elasticsearch.action.ActionRunnable$2.accept(ActionRunnable.java:51)
	at [email protected]/org.elasticsearch.action.ActionRunnable$2.accept(ActionRunnable.java:48)
	at [email protected]/org.elasticsearch.action.ActionRunnable$3.doRun(ActionRunnable.java:73)
	at [email protected]/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions