Skip to content

Commit 7fb6ac3

Browse files
committed
bulk visit
1 parent 3ad55ce commit 7fb6ac3

File tree

4 files changed

+34
-9
lines changed

4 files changed

+34
-9
lines changed

lucene/core/src/java/org/apache/lucene/index/PointValues.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,12 @@ public interface IntersectVisitor {
287287
*/
288288
void visit(int docID) throws IOException;
289289

290+
default void visit(int[] docID, int count) throws IOException {
291+
for (int i = 0; i < count; i++) {
292+
visit(docID[i]);
293+
}
294+
}
295+
290296
/**
291297
* Similar to {@link IntersectVisitor#visit(int)}, but a bulk visit and implements may have
292298
* their optimizations.

lucene/core/src/java/org/apache/lucene/search/PointRangeQuery.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,11 @@ public void visit(int docID) {
180180
adder.add(docID);
181181
}
182182

183+
@Override
184+
public void visit(int[] docID, int count) throws IOException {
185+
adder.add(docID, count);
186+
}
187+
183188
@Override
184189
public void visit(DocIdSetIterator iterator) throws IOException {
185190
adder.add(iterator);
@@ -219,6 +224,14 @@ public void visit(int docID) {
219224
cost[0]--;
220225
}
221226

227+
@Override
228+
public void visit(int[] docID, int count) throws IOException {
229+
for (int i = 0; i < count; i++) {
230+
result.clear(docID[i]);
231+
}
232+
cost[0] -= count;
233+
}
234+
222235
@Override
223236
public void visit(DocIdSetIterator iterator) throws IOException {
224237
result.andNot(iterator);

lucene/core/src/java/org/apache/lucene/util/DocIdSetBuilder.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ public final class DocIdSetBuilder {
4444
public abstract static class BulkAdder {
4545
public abstract void add(int doc);
4646

47+
public void add(int[] docs, int count) {
48+
for (int i=0; i<count; i++) {
49+
add(docs[i]);
50+
}
51+
}
52+
4753
public void add(DocIdSetIterator iterator) throws IOException {
4854
int docID;
4955
while ((docID = iterator.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
@@ -92,6 +98,12 @@ private static class BufferAdder extends BulkAdder {
9298
this.buffer = buffer;
9399
}
94100

101+
@Override
102+
public void add(int[] docs, int count) {
103+
System.arraycopy(docs, 0, buffer.array, buffer.length, count);
104+
buffer.length += count;
105+
}
106+
95107
@Override
96108
public void add(int doc) {
97109
buffer.array[buffer.length++] = doc;

lucene/core/src/java/org/apache/lucene/util/bkd/DocIdsWriter.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -308,22 +308,16 @@ private static void readContinuousIds(IndexInput in, int count, IntersectVisitor
308308
private void readDelta16(IndexInput in, int count, IntersectVisitor visitor) throws IOException {
309309
final int min = in.readVInt();
310310
forUtil.decode16(in, scratch, count, min);
311-
for (int i = 0; i < count; i++) {
312-
visitor.visit(scratch[i]);
313-
}
311+
visitor.visit(scratch, count);
314312
}
315313

316314
private void readInts24(IndexInput in, int count, IntersectVisitor visitor) throws IOException {
317315
forUtil.decode24(in, scratch, count);
318-
for (int i = 0; i < count; i++) {
319-
visitor.visit(scratch[i]);
320-
}
316+
visitor.visit(scratch, count);
321317
}
322318

323319
private void readInts32(IndexInput in, int count, IntersectVisitor visitor) throws IOException {
324320
in.readInts(scratch, 0, count);
325-
for (int i = 0; i < count; i++) {
326-
visitor.visit(scratch[i]);
327-
}
321+
visitor.visit(scratch, count);
328322
}
329323
}

0 commit comments

Comments
 (0)