diff --git a/nifi-extension-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/index/lucene/LuceneEventIndex.java b/nifi-extension-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/index/lucene/LuceneEventIndex.java index 45dabfd999..60f444f988 100644 --- a/nifi-extension-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/index/lucene/LuceneEventIndex.java +++ b/nifi-extension-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/index/lucene/LuceneEventIndex.java @@ -19,6 +19,7 @@ package org.apache.nifi.provenance.index.lucene; import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.StoredFields; import org.apache.lucene.index.Term; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; @@ -333,8 +334,9 @@ public class LuceneEventIndex implements EventIndex { try { final IndexReader reader = searcher.getIndexSearcher().getIndexReader(); + final StoredFields storedFields = reader.storedFields(); final int maxDocId = reader.maxDoc() - 1; - final Document document = reader.document(maxDocId); + final Document document = storedFields.document(maxDocId); final long eventId = document.getField(SearchableFields.Identifier.getSearchableFieldName()).numericValue().longValue(); logger.info("Determined that Max Event ID indexed for Partition {} is approximately {} based on index {}", partitionName, eventId, directory); return eventId; diff --git a/nifi-extension-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/index/lucene/QueryTask.java b/nifi-extension-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/index/lucene/QueryTask.java index 368a19dc38..a6ef58a22b 100644 --- a/nifi-extension-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/index/lucene/QueryTask.java +++ b/nifi-extension-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/index/lucene/QueryTask.java @@ -18,6 +18,7 @@ package org.apache.nifi.provenance.index.lucene; import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.StoredFields; import org.apache.lucene.search.Query; import org.apache.lucene.search.Sort; import org.apache.lucene.search.SortField; @@ -125,7 +126,9 @@ public class QueryTask implements Runnable { // Query lucene final IndexReader indexReader = searcher.getIndexSearcher().getIndexReader(); final TopDocs topDocs; + final StoredFields storedFields; try { + storedFields = indexReader.storedFields(); // Sort based on document id, descending. This gives us most recent events first. final Sort sort = new Sort(new SortField(null, SortField.Type.DOC, true)); @@ -152,7 +155,7 @@ public class QueryTask implements Runnable { return; } - final Tuple, Long> eventsAndTotalHits = readDocuments(topDocs, indexReader); + final Tuple, Long> eventsAndTotalHits = readDocuments(topDocs, storedFields); if (eventsAndTotalHits == null) { queryResult.update(Collections.emptyList(), 0L); @@ -174,7 +177,7 @@ public class QueryTask implements Runnable { } } - private Tuple, Long> readDocuments(final TopDocs topDocs, final IndexReader indexReader) { + private Tuple, Long> readDocuments(final TopDocs topDocs, final StoredFields storedFields) { // If no topDocs is supplied, just provide a Tuple that has no records and a hit count of 0. if (topDocs == null || topDocs.totalHits.value == 0) { return new Tuple<>(Collections. emptyList(), 0L); @@ -185,7 +188,7 @@ public class QueryTask implements Runnable { .mapToInt(scoreDoc -> scoreDoc.doc) .mapToObj(docId -> { try { - return indexReader.document(docId, LUCENE_FIELDS_TO_LOAD); + return storedFields.document(docId, LUCENE_FIELDS_TO_LOAD); } catch (final Exception e) { throw new SearchFailedException("Failed to read Provenance Events from Event File", e); } diff --git a/nifi-extension-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/lucene/DocsReader.java b/nifi-extension-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/lucene/DocsReader.java index 0e96b6248f..e62900d324 100644 --- a/nifi-extension-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/lucene/DocsReader.java +++ b/nifi-extension-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/lucene/DocsReader.java @@ -33,6 +33,7 @@ import java.util.concurrent.atomic.AtomicInteger; import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexableField; +import org.apache.lucene.index.StoredFields; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.nifi.provenance.ProvenanceEventRecord; @@ -58,10 +59,11 @@ public class DocsReader { final ScoreDoc[] scoreDocs = topDocs.scoreDocs; final int numDocs = Math.min(scoreDocs.length, maxResults); final List docs = new ArrayList<>(numDocs); + final StoredFields storedFields = indexReader.storedFields(); for (int i = numDocs - 1; i >= 0; i--) { final int docId = scoreDocs[i].doc; - final Document d = indexReader.document(docId); + final Document d = storedFields.document(docId); docs.add(d); }