diff --git a/enterprise/fulltext-addon/src/main/java/org/neo4j/kernel/api/impl/fulltext/FulltextUpdateApplier.java b/enterprise/fulltext-addon/src/main/java/org/neo4j/kernel/api/impl/fulltext/FulltextUpdateApplier.java index 9f18f34104cfd..13e3ca9365b05 100644 --- a/enterprise/fulltext-addon/src/main/java/org/neo4j/kernel/api/impl/fulltext/FulltextUpdateApplier.java +++ b/enterprise/fulltext-addon/src/main/java/org/neo4j/kernel/api/impl/fulltext/FulltextUpdateApplier.java @@ -48,7 +48,6 @@ import org.neo4j.logging.Log; import org.neo4j.scheduler.JobScheduler; -import static org.neo4j.kernel.api.impl.fulltext.LuceneFulltextDocumentStructure.documentForPopulation; import static org.neo4j.kernel.api.impl.fulltext.LuceneFulltextDocumentStructure.documentRepresentingProperties; import static org.neo4j.kernel.api.impl.fulltext.LuceneFulltextDocumentStructure.newTermForChangeOrRemove; @@ -165,7 +164,7 @@ private AsyncFulltextIndexOperation enqueuePopulateIndex( { PartitionedIndexWriter indexWriter = index.getIndexWriter(); String[] indexedPropertyKeys = index.properties().toArray( new String[0] ); - ArrayList documents = new ArrayList<>(); + ArrayList> documents = new ArrayList<>(); try ( Transaction ignore = db.beginTx( 1, TimeUnit.DAYS ) ) { ResourceIterable entities = entitySupplier.get(); @@ -175,17 +174,17 @@ private AsyncFulltextIndexOperation enqueuePopulateIndex( Map properties = entity.getProperties( indexedPropertyKeys ); if ( !properties.isEmpty() ) { - documents.add( documentForPopulation( entityId, properties ) ); + documents.add( documentBuilder( entityId, properties ) ); } if ( documents.size() > POPULATING_BATCH_SIZE ) { - indexWriter.addDocuments( documents.size(), documents ); + indexWriter.addDocuments( documents.size(), reifyDocuments( documents ) ); documents.clear(); } } } - indexWriter.addDocuments( documents.size(), documents ); + indexWriter.addDocuments( documents.size(), reifyDocuments( documents ) ); return Pair.of( index, completedLatch ); }; @@ -193,6 +192,16 @@ private AsyncFulltextIndexOperation enqueuePopulateIndex( return completedLatch; } + private Supplier documentBuilder( long entityId, Map properties ) + { + return () -> documentRepresentingProperties( entityId, properties ); + } + + private Iterable reifyDocuments( ArrayList> documents ) + { + return () -> documents.stream().map( Supplier::get ).iterator(); + } + private void enqueueUpdate( FulltextIndexUpdate update ) throws IOException { try diff --git a/enterprise/fulltext-addon/src/main/java/org/neo4j/kernel/api/impl/fulltext/LuceneFulltextDocumentStructure.java b/enterprise/fulltext-addon/src/main/java/org/neo4j/kernel/api/impl/fulltext/LuceneFulltextDocumentStructure.java index 8f2aace38215a..947354d894aa6 100644 --- a/enterprise/fulltext-addon/src/main/java/org/neo4j/kernel/api/impl/fulltext/LuceneFulltextDocumentStructure.java +++ b/enterprise/fulltext-addon/src/main/java/org/neo4j/kernel/api/impl/fulltext/LuceneFulltextDocumentStructure.java @@ -36,7 +36,6 @@ class LuceneFulltextDocumentStructure { - private static final ThreadLocal perThreadDocument = ThreadLocal.withInitial( DocWithId::new ); private LuceneFulltextDocumentStructure() @@ -62,14 +61,6 @@ static Field encodeValueField( String propertyKey, Value value ) return LuceneFulltextFieldEncoding.encodeField( propertyKey, value ); } - public static Document documentForPopulation( long entityId, Map properties ) - { - DocWithId docWithId = new DocWithId(); - docWithId.setId( entityId ); - docWithId.setValues( properties ); - return docWithId.document; - } - private static class DocWithId { private final Document document;