1
0
mirror of https://github.com/apache/nifi.git synced 2025-02-15 22:45:27 +00:00

NIFI-13214 Replaced deprecated Lucene IndexReader methods with StoredFields

This closes 

Signed-off-by: David Handermann <exceptionfactory@apache.org>
This commit is contained in:
dan-s1 2024-05-10 20:27:50 +00:00 committed by exceptionfactory
parent 6fc374b268
commit c66a3cf4ff
No known key found for this signature in database
3 changed files with 12 additions and 5 deletions
nifi-extension-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance

@ -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;

@ -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<List<ProvenanceEventRecord>, Long> eventsAndTotalHits = readDocuments(topDocs, indexReader);
final Tuple<List<ProvenanceEventRecord>, Long> eventsAndTotalHits = readDocuments(topDocs, storedFields);
if (eventsAndTotalHits == null) {
queryResult.update(Collections.emptyList(), 0L);
@ -174,7 +177,7 @@ public class QueryTask implements Runnable {
}
}
private Tuple<List<ProvenanceEventRecord>, Long> readDocuments(final TopDocs topDocs, final IndexReader indexReader) {
private Tuple<List<ProvenanceEventRecord>, 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.<ProvenanceEventRecord> 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);
}

@ -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<Document> 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);
}