You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2016/10/18 08:16:53 UTC
[2/2] lucene-solr:master: LUCENE-7494: Give points a per-field API.
LUCENE-7494: Give points a per-field API.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/c22725f0
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/c22725f0
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/c22725f0
Branch: refs/heads/master
Commit: c22725f0b53a0d1a50cbc5a9d21ced29e6d7cd39
Parents: 19c7f8e
Author: Adrien Grand <jp...@gmail.com>
Authored: Mon Oct 17 18:09:23 2016 +0200
Committer: Adrien Grand <jp...@gmail.com>
Committed: Tue Oct 18 10:14:27 2016 +0200
----------------------------------------------------------------------
lucene/CHANGES.txt | 2 +
.../codecs/simpletext/SimpleTextBKDReader.java | 1 -
.../simpletext/SimpleTextPointsReader.java | 81 +-------
.../simpletext/SimpleTextPointsWriter.java | 10 +-
.../lucene/codecs/MutablePointValues.java | 42 ++++
.../lucene/codecs/MutablePointsReader.java | 41 ----
.../org/apache/lucene/codecs/PointsFormat.java | 35 +---
.../org/apache/lucene/codecs/PointsReader.java | 5 +-
.../org/apache/lucene/codecs/PointsWriter.java | 207 ++++++++++---------
.../codecs/lucene60/Lucene60PointsReader.java | 84 +-------
.../codecs/lucene60/Lucene60PointsWriter.java | 23 ++-
.../org/apache/lucene/index/CheckIndex.java | 19 +-
.../org/apache/lucene/index/CodecReader.java | 12 ++
.../apache/lucene/index/FilterCodecReader.java | 5 -
.../apache/lucene/index/FilterLeafReader.java | 4 +-
.../org/apache/lucene/index/LeafReader.java | 5 +-
.../apache/lucene/index/MergeReaderWrapper.java | 4 +-
.../apache/lucene/index/ParallelLeafReader.java | 97 +--------
.../org/apache/lucene/index/PointValues.java | 64 +++---
.../apache/lucene/index/PointValuesWriter.java | 66 +++---
.../org/apache/lucene/index/SegmentReader.java | 8 +-
.../lucene/index/SlowCodecReaderWrapper.java | 46 +----
.../apache/lucene/index/SortingLeafReader.java | 33 ++-
.../apache/lucene/search/PointInSetQuery.java | 24 +--
.../apache/lucene/search/PointRangeQuery.java | 28 ++-
.../org/apache/lucene/util/DocIdSetBuilder.java | 2 +-
.../org/apache/lucene/util/bkd/BKDReader.java | 13 +-
.../org/apache/lucene/util/bkd/BKDWriter.java | 24 +--
.../util/bkd/MutablePointsReaderUtils.java | 10 +-
.../org/apache/lucene/index/Test2BPoints.java | 4 +-
.../apache/lucene/index/TestPointValues.java | 25 ++-
.../apache/lucene/util/TestDocIdSetBuilder.java | 14 +-
.../util/bkd/TestMutablePointsReaderUtils.java | 33 +--
.../search/highlight/TermVectorLeafReader.java | 2 +-
.../join/PointInSetIncludingScoreQuery.java | 10 +-
.../apache/lucene/index/memory/MemoryIndex.java | 91 +++-----
.../lucene/index/memory/TestMemoryIndex.java | 6 +-
.../org/apache/lucene/document/LatLonPoint.java | 9 +-
.../document/LatLonPointDistanceQuery.java | 4 +-
.../document/LatLonPointInPolygonQuery.java | 4 +-
.../apache/lucene/document/RangeFieldQuery.java | 8 +-
.../spatial3d/PointInGeo3DShapeQuery.java | 4 +-
.../apache/lucene/spatial3d/TestGeo3DPoint.java | 4 +-
.../codecs/asserting/AssertingPointsFormat.java | 139 +------------
.../codecs/cranky/CrankyPointsFormat.java | 110 +++++-----
.../lucene/index/AssertingLeafReader.java | 155 +++++++++++++-
.../lucene/index/BasePointsFormatTestCase.java | 26 +--
.../org/apache/lucene/index/RandomCodec.java | 9 +-
.../org/apache/lucene/search/QueryUtils.java | 2 +-
.../org/apache/lucene/util/LuceneTestCase.java | 4 +-
.../solr/index/SlowCompositeReaderWrapper.java | 2 +-
.../apache/solr/uninverting/FieldCacheImpl.java | 22 +-
.../test/org/apache/solr/search/TestDocSet.java | 2 +-
53 files changed, 688 insertions(+), 996 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 54329ab..6defb27 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -25,6 +25,8 @@ API Changes
* LUCENE-7475: Norms now support sparsity, allowing to pay for what is
actually used. (Adrien Grand)
+* LUCENE-7494: Points now have a per-field API, like doc values. (Adrien Grand)
+
Bug Fixes
Improvements
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextBKDReader.java
----------------------------------------------------------------------
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextBKDReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextBKDReader.java
index 35e9448..a2b784a 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextBKDReader.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextBKDReader.java
@@ -20,7 +20,6 @@ package org.apache.lucene.codecs.simpletext;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
-import org.apache.lucene.index.PointValues.IntersectVisitor;
import org.apache.lucene.store.IndexInput;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefBuilder;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsReader.java
----------------------------------------------------------------------
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsReader.java
index 1477f17..e3b880a 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsReader.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsReader.java
@@ -26,6 +26,7 @@ import org.apache.lucene.codecs.PointsReader;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.IndexFileNames;
+import org.apache.lucene.index.PointValues;
import org.apache.lucene.index.SegmentReadState;
import org.apache.lucene.store.BufferedChecksumIndexInput;
import org.apache.lucene.store.ChecksumIndexInput;
@@ -174,7 +175,8 @@ class SimpleTextPointsReader extends PointsReader {
return new String(scratch.bytes(), prefix.length, scratch.length() - prefix.length, StandardCharsets.UTF_8);
}
- private BKDReader getBKDReader(String fieldName) {
+ @Override
+ public PointValues getValues(String fieldName) throws IOException {
FieldInfo fieldInfo = readState.fieldInfos.fieldInfo(fieldName);
if (fieldInfo == null) {
throw new IllegalArgumentException("field=\"" + fieldName + "\" is unrecognized");
@@ -185,18 +187,6 @@ class SimpleTextPointsReader extends PointsReader {
return readers.get(fieldName);
}
- /** Finds all documents and points matching the provided visitor */
- @Override
- public void intersect(String fieldName, IntersectVisitor visitor) throws IOException {
- BKDReader bkdReader = getBKDReader(fieldName);
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this field were deleted in this segment:
- return;
- }
- bkdReader.intersect(visitor);
- }
-
@Override
public void checkIntegrity() throws IOException {
BytesRefBuilder scratch = new BytesRefBuilder();
@@ -234,69 +224,4 @@ class SimpleTextPointsReader extends PointsReader {
return "SimpleTextPointsReader(segment=" + readState.segmentInfo.name + " maxDoc=" + readState.segmentInfo.maxDoc() + ")";
}
- @Override
- public byte[] getMinPackedValue(String fieldName) {
- BKDReader bkdReader = getBKDReader(fieldName);
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this field were deleted in this segment:
- return null;
- }
- return bkdReader.getMinPackedValue();
- }
-
- @Override
- public byte[] getMaxPackedValue(String fieldName) {
- BKDReader bkdReader = getBKDReader(fieldName);
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this field were deleted in this segment:
- return null;
- }
- return bkdReader.getMaxPackedValue();
- }
-
- @Override
- public int getNumDimensions(String fieldName) {
- BKDReader bkdReader = getBKDReader(fieldName);
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this field were deleted in this segment:
- return 0;
- }
- return bkdReader.getNumDimensions();
- }
-
- @Override
- public int getBytesPerDimension(String fieldName) {
- BKDReader bkdReader = getBKDReader(fieldName);
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this field were deleted in this segment:
- return 0;
- }
- return bkdReader.getBytesPerDimension();
- }
-
- @Override
- public long size(String fieldName) {
- BKDReader bkdReader = getBKDReader(fieldName);
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this field were deleted in this segment:
- return 0;
- }
- return bkdReader.getPointCount();
- }
-
- @Override
- public int getDocCount(String fieldName) {
- BKDReader bkdReader = getBKDReader(fieldName);
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this field were deleted in this segment:
- return 0;
- }
- return bkdReader.getDocCount();
- }
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsWriter.java
----------------------------------------------------------------------
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsWriter.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsWriter.java
index 8d5c034..c06c128 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsWriter.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsWriter.java
@@ -26,6 +26,7 @@ import org.apache.lucene.codecs.PointsReader;
import org.apache.lucene.codecs.PointsWriter;
import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.IndexFileNames;
+import org.apache.lucene.index.PointValues;
import org.apache.lucene.index.PointValues.IntersectVisitor;
import org.apache.lucene.index.PointValues.Relation;
import org.apache.lucene.index.SegmentWriteState;
@@ -68,9 +69,10 @@ class SimpleTextPointsWriter extends PointsWriter {
}
@Override
- public void writeField(FieldInfo fieldInfo, PointsReader values) throws IOException {
+ public void writeField(FieldInfo fieldInfo, PointsReader reader) throws IOException {
- boolean singleValuePerDoc = values.size(fieldInfo.name) == values.getDocCount(fieldInfo.name);
+ PointValues values = reader.getValues(fieldInfo.name);
+ boolean singleValuePerDoc = values.size() == values.getDocCount();
// We use the normal BKDWriter, but subclass to customize how it writes the index and blocks to disk:
try (BKDWriter writer = new BKDWriter(writeState.segmentInfo.maxDoc(),
@@ -80,7 +82,7 @@ class SimpleTextPointsWriter extends PointsWriter {
fieldInfo.getPointNumBytes(),
BKDWriter.DEFAULT_MAX_POINTS_IN_LEAF_NODE,
BKDWriter.DEFAULT_MAX_MB_SORT_IN_HEAP,
- values.size(fieldInfo.name),
+ values.size(),
singleValuePerDoc) {
@Override
@@ -173,7 +175,7 @@ class SimpleTextPointsWriter extends PointsWriter {
}
}) {
- values.intersect(fieldInfo.name, new IntersectVisitor() {
+ values.intersect(new IntersectVisitor() {
@Override
public void visit(int docID) {
throw new IllegalStateException();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/codecs/MutablePointValues.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/MutablePointValues.java b/lucene/core/src/java/org/apache/lucene/codecs/MutablePointValues.java
new file mode 100644
index 0000000..8f4d69c
--- /dev/null
+++ b/lucene/core/src/java/org/apache/lucene/codecs/MutablePointValues.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.lucene.codecs;
+
+import org.apache.lucene.index.PointValues;
+import org.apache.lucene.util.BytesRef;
+
+/** {@link PointValues} whose order of points can be changed.
+ * This class is useful for codecs to optimize flush.
+ * @lucene.internal */
+public abstract class MutablePointValues extends PointValues {
+
+ /** Sole constructor. */
+ protected MutablePointValues() {}
+
+ /** Set {@code packedValue} with a reference to the packed bytes of the i-th value. */
+ public abstract void getValue(int i, BytesRef packedValue);
+
+ /** Get the k-th byte of the i-th value. */
+ public abstract byte getByteAt(int i, int k);
+
+ /** Return the doc ID of the i-th value. */
+ public abstract int getDocID(int i);
+
+ /** Swap the i-th and j-th values. */
+ public abstract void swap(int i, int j);
+
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/codecs/MutablePointsReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/MutablePointsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/MutablePointsReader.java
deleted file mode 100644
index dccca26..0000000
--- a/lucene/core/src/java/org/apache/lucene/codecs/MutablePointsReader.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.lucene.codecs;
-
-import org.apache.lucene.util.BytesRef;
-
-/** {@link PointsReader} whose order of points can be changed.
- * This class is useful for codecs to optimize flush.
- * @lucene.internal */
-public abstract class MutablePointsReader extends PointsReader {
-
- /** Sole constructor. */
- protected MutablePointsReader() {}
-
- /** Set {@code packedValue} with a reference to the packed bytes of the i-th value. */
- public abstract void getValue(int i, BytesRef packedValue);
-
- /** Get the k-th byte of the i-th value. */
- public abstract byte getByteAt(int i, int k);
-
- /** Return the doc ID of the i-th value. */
- public abstract int getDocID(int i);
-
- /** Swap the i-th and j-th values. */
- public abstract void swap(int i, int j);
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/codecs/PointsFormat.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/PointsFormat.java b/lucene/core/src/java/org/apache/lucene/codecs/PointsFormat.java
index e49bf53..1723e42 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/PointsFormat.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/PointsFormat.java
@@ -19,6 +19,7 @@ package org.apache.lucene.codecs;
import java.io.IOException;
+import org.apache.lucene.index.PointValues;
import org.apache.lucene.index.SegmentReadState;
import org.apache.lucene.index.SegmentWriteState;
@@ -72,38 +73,8 @@ public abstract class PointsFormat {
}
@Override
- public void intersect(String fieldName, IntersectVisitor visitor) {
- throw new IllegalArgumentException("field=\"" + fieldName + "\" was not indexed with points");
- }
-
- @Override
- public byte[] getMinPackedValue(String fieldName) {
- throw new IllegalArgumentException("field=\"" + fieldName + "\" was not indexed with points");
- }
-
- @Override
- public byte[] getMaxPackedValue(String fieldName) {
- throw new IllegalArgumentException("field=\"" + fieldName + "\" was not indexed with points");
- }
-
- @Override
- public int getNumDimensions(String fieldName) {
- throw new IllegalArgumentException("field=\"" + fieldName + "\" was not indexed with points");
- }
-
- @Override
- public int getBytesPerDimension(String fieldName) {
- throw new IllegalArgumentException("field=\"" + fieldName + "\" was not indexed with points");
- }
-
- @Override
- public long size(String fieldName) {
- throw new IllegalArgumentException("field=\"" + fieldName + "\" was not indexed with points");
- }
-
- @Override
- public int getDocCount(String fieldName) {
- throw new IllegalArgumentException("field=\"" + fieldName + "\" was not indexed with points");
+ public PointValues getValues(String field) {
+ throw new IllegalArgumentException("field=\"" + field + "\" was not indexed with points");
}
};
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/codecs/PointsReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/PointsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/PointsReader.java
index ab21431..b20614a 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/PointsReader.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/PointsReader.java
@@ -27,7 +27,7 @@ import org.apache.lucene.util.Accountable;
*
* @lucene.experimental
*/
-public abstract class PointsReader extends PointValues implements Closeable, Accountable {
+public abstract class PointsReader implements Closeable, Accountable {
/** Sole constructor. (For invocation by subclass constructors, typically implicit.) */
protected PointsReader() {}
@@ -41,6 +41,9 @@ public abstract class PointsReader extends PointValues implements Closeable, Acc
*/
public abstract void checkIntegrity() throws IOException;
+ /** Return {@link PointValues} for the given {@code field}. */
+ public abstract PointValues getValues(String field) throws IOException;
+
/**
* Returns an instance optimized for merging.
* <p>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/codecs/PointsWriter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/PointsWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/PointsWriter.java
index eac1716..38cd440 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/PointsWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/PointsWriter.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.MergeState;
+import org.apache.lucene.index.PointValues;
/** Abstract API to write points
*
@@ -48,109 +49,121 @@ public abstract class PointsWriter implements Closeable {
if (pointsReader != null) {
FieldInfo readerFieldInfo = mergeState.fieldInfos[i].fieldInfo(fieldInfo.name);
if (readerFieldInfo != null && readerFieldInfo.getPointDimensionCount() > 0) {
- maxPointCount += pointsReader.size(fieldInfo.name);
- docCount += pointsReader.getDocCount(fieldInfo.name);
+ PointValues values = pointsReader.getValues(fieldInfo.name);
+ if (values != null) {
+ maxPointCount += values.size();
+ docCount += values.getDocCount();
+ }
}
}
}
final long finalMaxPointCount = maxPointCount;
final int finalDocCount = docCount;
writeField(fieldInfo,
- new PointsReader() {
- @Override
- public void intersect(String fieldName, IntersectVisitor mergedVisitor) throws IOException {
- if (fieldName.equals(fieldInfo.name) == false) {
- throw new IllegalArgumentException("field name must match the field being merged");
- }
-
- for (int i=0;i<mergeState.pointsReaders.length;i++) {
- PointsReader pointsReader = mergeState.pointsReaders[i];
- if (pointsReader == null) {
- // This segment has no points
- continue;
- }
- FieldInfo readerFieldInfo = mergeState.fieldInfos[i].fieldInfo(fieldName);
- if (readerFieldInfo == null) {
- // This segment never saw this field
- continue;
- }
-
- if (readerFieldInfo.getPointDimensionCount() == 0) {
- // This segment saw this field, but the field did not index points in it:
- continue;
- }
-
- MergeState.DocMap docMap = mergeState.docMaps[i];
- pointsReader.intersect(fieldInfo.name,
- new IntersectVisitor() {
- @Override
- public void visit(int docID) {
- // Should never be called because our compare method never returns Relation.CELL_INSIDE_QUERY
- throw new IllegalStateException();
- }
-
- @Override
- public void visit(int docID, byte[] packedValue) throws IOException {
- int newDocID = docMap.get(docID);
- if (newDocID != -1) {
- // Not deleted:
- mergedVisitor.visit(newDocID, packedValue);
- }
- }
-
- @Override
- public Relation compare(byte[] minPackedValue, byte[] maxPackedValue) {
- // Forces this segment's PointsReader to always visit all docs + values:
- return Relation.CELL_CROSSES_QUERY;
- }
- });
- }
- }
-
- @Override
- public void checkIntegrity() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public long ramBytesUsed() {
- return 0L;
- }
-
- @Override
- public void close() {
- }
-
- @Override
- public byte[] getMinPackedValue(String fieldName) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public byte[] getMaxPackedValue(String fieldName) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public int getNumDimensions(String fieldName) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public int getBytesPerDimension(String fieldName) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public long size(String fieldName) {
- return finalMaxPointCount;
- }
-
- @Override
- public int getDocCount(String fieldName) {
- return finalDocCount;
- }
- });
+ new PointsReader() {
+
+ @Override
+ public long ramBytesUsed() {
+ return 0;
+ }
+
+ @Override
+ public void close() throws IOException {}
+
+ @Override
+ public PointValues getValues(String fieldName) {
+ if (fieldName.equals(fieldInfo.name) == false) {
+ throw new IllegalArgumentException("field name must match the field being merged");
+ }
+
+ return new PointValues() {
+
+ @Override
+ public void intersect(IntersectVisitor mergedVisitor) throws IOException {
+ for (int i=0;i<mergeState.pointsReaders.length;i++) {
+ PointsReader pointsReader = mergeState.pointsReaders[i];
+ if (pointsReader == null) {
+ // This segment has no points
+ continue;
+ }
+ FieldInfo readerFieldInfo = mergeState.fieldInfos[i].fieldInfo(fieldName);
+ if (readerFieldInfo == null) {
+ // This segment never saw this field
+ continue;
+ }
+
+ if (readerFieldInfo.getPointDimensionCount() == 0) {
+ // This segment saw this field, but the field did not index points in it:
+ continue;
+ }
+
+ PointValues values = pointsReader.getValues(fieldName);
+ if (values == null) {
+ continue;
+ }
+ MergeState.DocMap docMap = mergeState.docMaps[i];
+ values.intersect(new IntersectVisitor() {
+ @Override
+ public void visit(int docID) {
+ // Should never be called because our compare method never returns Relation.CELL_INSIDE_QUERY
+ throw new IllegalStateException();
+ }
+
+ @Override
+ public void visit(int docID, byte[] packedValue) throws IOException {
+ int newDocID = docMap.get(docID);
+ if (newDocID != -1) {
+ // Not deleted:
+ mergedVisitor.visit(newDocID, packedValue);
+ }
+ }
+
+ @Override
+ public Relation compare(byte[] minPackedValue, byte[] maxPackedValue) {
+ // Forces this segment's PointsReader to always visit all docs + values:
+ return Relation.CELL_CROSSES_QUERY;
+ }
+ });
+ }
+ }
+
+ @Override
+ public byte[] getMinPackedValue() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public byte[] getMaxPackedValue() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public int getNumDimensions() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public int getBytesPerDimension() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public long size() {
+ return finalMaxPointCount;
+ }
+
+ @Override
+ public int getDocCount() {
+ return finalDocCount;
+ }
+ };
+ }
+
+ @Override
+ public void checkIntegrity() throws IOException {
+ throw new UnsupportedOperationException();
+ }
+ });
}
/** Default merge implementation to merge incoming points readers by visiting all their points and
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointsReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointsReader.java
index 8c91a99..0eecdbb 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointsReader.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointsReader.java
@@ -30,6 +30,7 @@ import org.apache.lucene.codecs.CodecUtil;
import org.apache.lucene.codecs.PointsReader;
import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.IndexFileNames;
+import org.apache.lucene.index.PointValues;
import org.apache.lucene.index.SegmentReadState;
import org.apache.lucene.store.ChecksumIndexInput;
import org.apache.lucene.store.IndexInput;
@@ -117,7 +118,8 @@ public class Lucene60PointsReader extends PointsReader implements Closeable {
/** Returns the underlying {@link BKDReader}.
*
* @lucene.internal */
- public BKDReader getBKDReader(String fieldName) {
+ @Override
+ public PointValues getValues(String fieldName) {
FieldInfo fieldInfo = readState.fieldInfos.fieldInfo(fieldName);
if (fieldInfo == null) {
throw new IllegalArgumentException("field=\"" + fieldName + "\" is unrecognized");
@@ -130,19 +132,6 @@ public class Lucene60PointsReader extends PointsReader implements Closeable {
}
@Override
- public void intersect(String fieldName, IntersectVisitor visitor) throws IOException {
- BKDReader bkdReader = getBKDReader(fieldName);
-
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this point field were deleted in this segment:
- return;
- }
-
- bkdReader.intersect(visitor);
- }
-
- @Override
public long ramBytesUsed() {
long sizeInBytes = 0;
for(BKDReader reader : readers.values()) {
@@ -173,72 +162,5 @@ public class Lucene60PointsReader extends PointsReader implements Closeable {
readers.clear();
}
- @Override
- public byte[] getMinPackedValue(String fieldName) {
- BKDReader bkdReader = getBKDReader(fieldName);
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this point field were deleted in this segment:
- return null;
- }
-
- return bkdReader.getMinPackedValue();
- }
-
- @Override
- public byte[] getMaxPackedValue(String fieldName) {
- BKDReader bkdReader = getBKDReader(fieldName);
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this point field were deleted in this segment:
- return null;
- }
-
- return bkdReader.getMaxPackedValue();
- }
-
- @Override
- public int getNumDimensions(String fieldName) {
- BKDReader bkdReader = getBKDReader(fieldName);
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this point field were deleted in this segment:
- return 0;
- }
- return bkdReader.getNumDimensions();
- }
-
- @Override
- public int getBytesPerDimension(String fieldName) {
- BKDReader bkdReader = getBKDReader(fieldName);
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this point field were deleted in this segment:
- return 0;
- }
- return bkdReader.getBytesPerDimension();
- }
-
- @Override
- public long size(String fieldName) {
- BKDReader bkdReader = getBKDReader(fieldName);
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this point field were deleted in this segment:
- return 0;
- }
- return bkdReader.getPointCount();
- }
-
- @Override
- public int getDocCount(String fieldName) {
- BKDReader bkdReader = getBKDReader(fieldName);
- if (bkdReader == null) {
- // Schema ghost corner case! This field did index points in the past, but
- // now all docs having this point field were deleted in this segment:
- return 0;
- }
- return bkdReader.getDocCount();
- }
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointsWriter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointsWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointsWriter.java
index 05a1bf9..0f3af85 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointsWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointsWriter.java
@@ -25,13 +25,14 @@ import java.util.List;
import java.util.Map;
import org.apache.lucene.codecs.CodecUtil;
-import org.apache.lucene.codecs.MutablePointsReader;
+import org.apache.lucene.codecs.MutablePointValues;
import org.apache.lucene.codecs.PointsReader;
import org.apache.lucene.codecs.PointsWriter;
import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.FieldInfos;
import org.apache.lucene.index.IndexFileNames;
import org.apache.lucene.index.MergeState;
+import org.apache.lucene.index.PointValues;
import org.apache.lucene.index.PointValues.IntersectVisitor;
import org.apache.lucene.index.PointValues.Relation;
import org.apache.lucene.index.SegmentWriteState;
@@ -85,9 +86,10 @@ public class Lucene60PointsWriter extends PointsWriter implements Closeable {
}
@Override
- public void writeField(FieldInfo fieldInfo, PointsReader values) throws IOException {
+ public void writeField(FieldInfo fieldInfo, PointsReader reader) throws IOException {
- boolean singleValuePerDoc = values.size(fieldInfo.name) == values.getDocCount(fieldInfo.name);
+ PointValues values = reader.getValues(fieldInfo.name);
+ boolean singleValuePerDoc = values.size() == values.getDocCount();
try (BKDWriter writer = new BKDWriter(writeState.segmentInfo.maxDoc(),
writeState.directory,
@@ -96,18 +98,18 @@ public class Lucene60PointsWriter extends PointsWriter implements Closeable {
fieldInfo.getPointNumBytes(),
maxPointsInLeafNode,
maxMBSortInHeap,
- values.size(fieldInfo.name),
+ values.size(),
singleValuePerDoc)) {
- if (values instanceof MutablePointsReader) {
- final long fp = writer.writeField(dataOut, fieldInfo.name, (MutablePointsReader) values);
+ if (values instanceof MutablePointValues) {
+ final long fp = writer.writeField(dataOut, fieldInfo.name, (MutablePointValues) values);
if (fp != -1) {
indexFPs.put(fieldInfo.name, fp);
}
return;
}
- values.intersect(fieldInfo.name, new IntersectVisitor() {
+ values.intersect(new IntersectVisitor() {
@Override
public void visit(int docID) {
throw new IllegalStateException();
@@ -166,8 +168,11 @@ public class Lucene60PointsWriter extends PointsWriter implements Closeable {
FieldInfos readerFieldInfos = mergeState.fieldInfos[i];
FieldInfo readerFieldInfo = readerFieldInfos.fieldInfo(fieldInfo.name);
if (readerFieldInfo != null && readerFieldInfo.getPointDimensionCount() > 0) {
- totMaxSize += reader.size(fieldInfo.name);
- singleValuePerDoc &= reader.size(fieldInfo.name) == reader.getDocCount(fieldInfo.name);
+ PointValues values = reader.getValues(fieldInfo.name);
+ if (values != null) {
+ totMaxSize += values.size();
+ singleValuePerDoc &= values.size() == values.getDocCount();
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java b/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
index 27d7c50..aec7537 100644
--- a/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
+++ b/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
@@ -1793,8 +1793,8 @@ public final class CheckIndex implements Closeable {
try {
if (fieldInfos.hasPointValues()) {
- PointsReader values = reader.getPointsReader();
- if (values == null) {
+ PointsReader pointsReader = reader.getPointsReader();
+ if (pointsReader == null) {
throw new RuntimeException("there are fields with points, but reader.getPointsReader() is null");
}
for (FieldInfo fieldInfo : fieldInfos) {
@@ -1812,9 +1812,13 @@ public final class CheckIndex implements Closeable {
long[] pointCountSeen = new long[1];
- byte[] globalMinPackedValue = values.getMinPackedValue(fieldInfo.name);
- long size = values.size(fieldInfo.name);
- int docCount = values.getDocCount(fieldInfo.name);
+ PointValues values = pointsReader.getValues(fieldInfo.name);
+ if (values == null) {
+ continue;
+ }
+ byte[] globalMinPackedValue = values.getMinPackedValue();
+ long size = values.size();
+ int docCount = values.getDocCount();
if (docCount > size) {
throw new RuntimeException("point values for field \"" + fieldInfo.name + "\" claims to have size=" + size + " points and inconsistent docCount=" + docCount);
@@ -1831,7 +1835,7 @@ public final class CheckIndex implements Closeable {
} else if (globalMinPackedValue.length != packedBytesCount) {
throw new RuntimeException("getMinPackedValue for field \"" + fieldInfo.name + "\" return length=" + globalMinPackedValue.length + " array, but should be " + packedBytesCount);
}
- byte[] globalMaxPackedValue = values.getMaxPackedValue(fieldInfo.name);
+ byte[] globalMaxPackedValue = values.getMaxPackedValue();
if (globalMaxPackedValue == null) {
if (size != 0) {
throw new RuntimeException("getMaxPackedValue is null points for field \"" + fieldInfo.name + "\" yet size=" + size);
@@ -1840,8 +1844,7 @@ public final class CheckIndex implements Closeable {
throw new RuntimeException("getMaxPackedValue for field \"" + fieldInfo.name + "\" return length=" + globalMaxPackedValue.length + " array, but should be " + packedBytesCount);
}
- values.intersect(fieldInfo.name,
- new PointValues.IntersectVisitor() {
+ values.intersect(new PointValues.IntersectVisitor() {
private int lastDocID = -1;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/index/CodecReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/CodecReader.java b/lucene/core/src/java/org/apache/lucene/index/CodecReader.java
index b9ad73a..460a9d6 100644
--- a/lucene/core/src/java/org/apache/lucene/index/CodecReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/CodecReader.java
@@ -189,6 +189,18 @@ public abstract class CodecReader extends LeafReader implements Accountable {
}
@Override
+ public final PointValues getPointValues(String field) throws IOException {
+ ensureOpen();
+ FieldInfo fi = getFieldInfos().fieldInfo(field);
+ if (fi == null || fi.getPointDimensionCount() == 0) {
+ // Field does not exist or does not index points
+ return null;
+ }
+
+ return getPointsReader().getValues(field);
+ }
+
+ @Override
protected void doClose() throws IOException {
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/index/FilterCodecReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/FilterCodecReader.java b/lucene/core/src/java/org/apache/lucene/index/FilterCodecReader.java
index 13b6e8d..48cbda7 100644
--- a/lucene/core/src/java/org/apache/lucene/index/FilterCodecReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/FilterCodecReader.java
@@ -88,11 +88,6 @@ public abstract class FilterCodecReader extends CodecReader {
}
@Override
- public PointValues getPointValues() {
- return in.getPointValues();
- }
-
- @Override
public int numDocs() {
return in.numDocs();
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java b/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java
index 9e9fcb4..9ed62e7 100644
--- a/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java
@@ -382,8 +382,8 @@ public abstract class FilterLeafReader extends LeafReader {
}
@Override
- public PointValues getPointValues() {
- return in.getPointValues();
+ public PointValues getPointValues(String field) throws IOException {
+ return in.getPointValues(field);
}
@Override
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/index/LeafReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/LeafReader.java b/lucene/core/src/java/org/apache/lucene/index/LeafReader.java
index 1b67767..acdd0d8 100644
--- a/lucene/core/src/java/org/apache/lucene/index/LeafReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/LeafReader.java
@@ -295,8 +295,9 @@ public abstract class LeafReader extends IndexReader {
public abstract Bits getLiveDocs();
/** Returns the {@link PointValues} used for numeric or
- * spatial searches, or null if there are no point fields. */
- public abstract PointValues getPointValues();
+ * spatial searches for the given field, or null if there
+ * are no point fields. */
+ public abstract PointValues getPointValues(String field) throws IOException;
/**
* Checks consistency of this reader.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/index/MergeReaderWrapper.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/MergeReaderWrapper.java b/lucene/core/src/java/org/apache/lucene/index/MergeReaderWrapper.java
index 4c06b38..7eb90df 100644
--- a/lucene/core/src/java/org/apache/lucene/index/MergeReaderWrapper.java
+++ b/lucene/core/src/java/org/apache/lucene/index/MergeReaderWrapper.java
@@ -197,8 +197,8 @@ class MergeReaderWrapper extends LeafReader {
}
@Override
- public PointValues getPointValues() {
- return in.getPointValues();
+ public PointValues getPointValues(String fieldName) throws IOException {
+ return in.getPointValues(fieldName);
}
@Override
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/index/ParallelLeafReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/ParallelLeafReader.java b/lucene/core/src/java/org/apache/lucene/index/ParallelLeafReader.java
index f4afa11..60886ea 100644
--- a/lucene/core/src/java/org/apache/lucene/index/ParallelLeafReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/ParallelLeafReader.java
@@ -321,99 +321,10 @@ public class ParallelLeafReader extends LeafReader {
}
@Override
- public PointValues getPointValues() {
- return new PointValues() {
- @Override
- public void intersect(String fieldName, IntersectVisitor visitor) throws IOException {
- LeafReader reader = fieldToReader.get(fieldName);
- if (reader == null) {
- return;
- }
- PointValues dimValues = reader.getPointValues();
- if (dimValues == null) {
- return;
- }
- dimValues.intersect(fieldName, visitor);
- }
-
- @Override
- public byte[] getMinPackedValue(String fieldName) throws IOException {
- LeafReader reader = fieldToReader.get(fieldName);
- if (reader == null) {
- return null;
- }
- PointValues dimValues = reader.getPointValues();
- if (dimValues == null) {
- return null;
- }
- return dimValues.getMinPackedValue(fieldName);
- }
-
- @Override
- public byte[] getMaxPackedValue(String fieldName) throws IOException {
- LeafReader reader = fieldToReader.get(fieldName);
- if (reader == null) {
- return null;
- }
- PointValues dimValues = reader.getPointValues();
- if (dimValues == null) {
- return null;
- }
- return dimValues.getMaxPackedValue(fieldName);
- }
-
- @Override
- public int getNumDimensions(String fieldName) throws IOException {
- LeafReader reader = fieldToReader.get(fieldName);
- if (reader == null) {
- return 0;
- }
- PointValues dimValues = reader.getPointValues();
- if (dimValues == null) {
- return 0;
- }
- return dimValues.getNumDimensions(fieldName);
- }
-
- @Override
- public int getBytesPerDimension(String fieldName) throws IOException {
- LeafReader reader = fieldToReader.get(fieldName);
- if (reader == null) {
- return 0;
- }
- PointValues dimValues = reader.getPointValues();
- if (dimValues == null) {
- return 0;
- }
- return dimValues.getBytesPerDimension(fieldName);
- }
-
- @Override
- public long size(String fieldName) {
- LeafReader reader = fieldToReader.get(fieldName);
- if (reader == null) {
- return 0;
- }
- PointValues dimValues = reader.getPointValues();
- if (dimValues == null) {
- return 0;
- }
- return dimValues.size(fieldName);
- }
-
- @Override
- public int getDocCount(String fieldName) {
- LeafReader reader = fieldToReader.get(fieldName);
- if (reader == null) {
- return 0;
- }
- PointValues dimValues = reader.getPointValues();
- if (dimValues == null) {
- return 0;
- }
- return dimValues.getDocCount(fieldName);
- }
- };
+ public PointValues getPointValues(String fieldName) throws IOException {
+ ensureOpen();
+ LeafReader reader = fieldToReader.get(fieldName);
+ return reader == null ? null : reader.getPointValues(fieldName);
}
@Override
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/index/PointValues.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/PointValues.java b/lucene/core/src/java/org/apache/lucene/index/PointValues.java
index 528f971..ffac5f7 100644
--- a/lucene/core/src/java/org/apache/lucene/index/PointValues.java
+++ b/lucene/core/src/java/org/apache/lucene/index/PointValues.java
@@ -89,16 +89,14 @@ public abstract class PointValues {
/** Return the cumulated number of points across all leaves of the given
* {@link IndexReader}. Leaves that do not have points for the given field
* are ignored.
- * @see PointValues#size(String) */
+ * @see PointValues#size() */
public static long size(IndexReader reader, String field) throws IOException {
long size = 0;
for (LeafReaderContext ctx : reader.leaves()) {
- FieldInfo info = ctx.reader().getFieldInfos().fieldInfo(field);
- if (info == null || info.getPointDimensionCount() == 0) {
- continue;
+ PointValues values = ctx.reader().getPointValues(field);
+ if (values != null) {
+ size += values.size();
}
- PointValues values = ctx.reader().getPointValues();
- size += values.size(field);
}
return size;
}
@@ -106,16 +104,14 @@ public abstract class PointValues {
/** Return the cumulated number of docs that have points across all leaves
* of the given {@link IndexReader}. Leaves that do not have points for the
* given field are ignored.
- * @see PointValues#getDocCount(String) */
+ * @see PointValues#getDocCount() */
public static int getDocCount(IndexReader reader, String field) throws IOException {
int count = 0;
for (LeafReaderContext ctx : reader.leaves()) {
- FieldInfo info = ctx.reader().getFieldInfos().fieldInfo(field);
- if (info == null || info.getPointDimensionCount() == 0) {
- continue;
+ PointValues values = ctx.reader().getPointValues(field);
+ if (values != null) {
+ count += values.getDocCount();
}
- PointValues values = ctx.reader().getPointValues();
- count += values.getDocCount(field);
}
return count;
}
@@ -123,24 +119,23 @@ public abstract class PointValues {
/** Return the minimum packed values across all leaves of the given
* {@link IndexReader}. Leaves that do not have points for the given field
* are ignored.
- * @see PointValues#getMinPackedValue(String) */
+ * @see PointValues#getMinPackedValue() */
public static byte[] getMinPackedValue(IndexReader reader, String field) throws IOException {
byte[] minValue = null;
for (LeafReaderContext ctx : reader.leaves()) {
- FieldInfo info = ctx.reader().getFieldInfos().fieldInfo(field);
- if (info == null || info.getPointDimensionCount() == 0) {
+ PointValues values = ctx.reader().getPointValues(field);
+ if (values == null) {
continue;
}
- PointValues values = ctx.reader().getPointValues();
- byte[] leafMinValue = values.getMinPackedValue(field);
+ byte[] leafMinValue = values.getMinPackedValue();
if (leafMinValue == null) {
continue;
}
if (minValue == null) {
minValue = leafMinValue.clone();
} else {
- final int numDimensions = values.getNumDimensions(field);
- final int numBytesPerDimension = values.getBytesPerDimension(field);
+ final int numDimensions = values.getNumDimensions();
+ final int numBytesPerDimension = values.getBytesPerDimension();
for (int i = 0; i < numDimensions; ++i) {
int offset = i * numBytesPerDimension;
if (StringHelper.compare(numBytesPerDimension, leafMinValue, offset, minValue, offset) < 0) {
@@ -155,24 +150,23 @@ public abstract class PointValues {
/** Return the maximum packed values across all leaves of the given
* {@link IndexReader}. Leaves that do not have points for the given field
* are ignored.
- * @see PointValues#getMaxPackedValue(String) */
+ * @see PointValues#getMaxPackedValue() */
public static byte[] getMaxPackedValue(IndexReader reader, String field) throws IOException {
byte[] maxValue = null;
for (LeafReaderContext ctx : reader.leaves()) {
- FieldInfo info = ctx.reader().getFieldInfos().fieldInfo(field);
- if (info == null || info.getPointDimensionCount() == 0) {
+ PointValues values = ctx.reader().getPointValues(field);
+ if (values == null) {
continue;
}
- PointValues values = ctx.reader().getPointValues();
- byte[] leafMaxValue = values.getMaxPackedValue(field);
+ byte[] leafMaxValue = values.getMaxPackedValue();
if (leafMaxValue == null) {
continue;
}
if (maxValue == null) {
maxValue = leafMaxValue.clone();
} else {
- final int numDimensions = values.getNumDimensions(field);
- final int numBytesPerDimension = values.getBytesPerDimension(field);
+ final int numDimensions = values.getNumDimensions();
+ final int numBytesPerDimension = values.getBytesPerDimension();
for (int i = 0; i < numDimensions; ++i) {
int offset = i * numBytesPerDimension;
if (StringHelper.compare(numBytesPerDimension, leafMaxValue, offset, maxValue, offset) > 0) {
@@ -224,23 +218,23 @@ public abstract class PointValues {
/** Finds all documents and points matching the provided visitor.
* This method does not enforce live documents, so it's up to the caller
* to test whether each document is deleted, if necessary. */
- public abstract void intersect(String fieldName, IntersectVisitor visitor) throws IOException;
+ public abstract void intersect(IntersectVisitor visitor) throws IOException;
/** Returns minimum value for each dimension, packed, or null if {@link #size} is <code>0</code> */
- public abstract byte[] getMinPackedValue(String fieldName) throws IOException;
+ public abstract byte[] getMinPackedValue() throws IOException;
/** Returns maximum value for each dimension, packed, or null if {@link #size} is <code>0</code> */
- public abstract byte[] getMaxPackedValue(String fieldName) throws IOException;
+ public abstract byte[] getMaxPackedValue() throws IOException;
/** Returns how many dimensions were indexed */
- public abstract int getNumDimensions(String fieldName) throws IOException;
+ public abstract int getNumDimensions() throws IOException;
/** Returns the number of bytes per dimension */
- public abstract int getBytesPerDimension(String fieldName) throws IOException;
+ public abstract int getBytesPerDimension() throws IOException;
- /** Returns the total number of indexed points across all documents in this field. */
- public abstract long size(String fieldName);
+ /** Returns the total number of indexed points across all documents. */
+ public abstract long size();
- /** Returns the total number of documents that have indexed at least one point for this field. */
- public abstract int getDocCount(String fieldName);
+ /** Returns the total number of documents that have indexed at least one point. */
+ public abstract int getDocCount();
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java b/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java
index daf1f33..fc50d52 100644
--- a/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java
@@ -18,7 +18,7 @@ package org.apache.lucene.index;
import java.io.IOException;
-import org.apache.lucene.codecs.MutablePointsReader;
+import org.apache.lucene.codecs.MutablePointValues;
import org.apache.lucene.codecs.PointsReader;
import org.apache.lucene.codecs.PointsWriter;
import org.apache.lucene.util.ArrayUtil;
@@ -70,7 +70,7 @@ class PointValuesWriter {
}
public void flush(SegmentWriteState state, PointsWriter writer) throws IOException {
- PointsReader reader = new MutablePointsReader() {
+ PointValues values = new MutablePointValues() {
final int[] ords = new int[numPoints];
{
@@ -80,10 +80,7 @@ class PointValuesWriter {
}
@Override
- public void intersect(String fieldName, IntersectVisitor visitor) throws IOException {
- if (fieldName.equals(fieldInfo.name) == false) {
- throw new IllegalArgumentException("fieldName must be the same");
- }
+ public void intersect(IntersectVisitor visitor) throws IOException {
final BytesRef scratch = new BytesRef();
final byte[] packedValue = new byte[packedBytesLength];
for(int i=0;i<numPoints;i++) {
@@ -95,52 +92,32 @@ class PointValuesWriter {
}
@Override
- public void checkIntegrity() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public long ramBytesUsed() {
- return 0L;
- }
-
- @Override
- public void close() {
- }
-
- @Override
- public byte[] getMinPackedValue(String fieldName) {
+ public byte[] getMinPackedValue() {
throw new UnsupportedOperationException();
}
@Override
- public byte[] getMaxPackedValue(String fieldName) {
+ public byte[] getMaxPackedValue() {
throw new UnsupportedOperationException();
}
@Override
- public int getNumDimensions(String fieldName) {
+ public int getNumDimensions() {
throw new UnsupportedOperationException();
}
@Override
- public int getBytesPerDimension(String fieldName) {
+ public int getBytesPerDimension() {
throw new UnsupportedOperationException();
}
@Override
- public long size(String fieldName) {
- if (fieldName.equals(fieldInfo.name) == false) {
- throw new IllegalArgumentException("fieldName must be the same");
- }
+ public long size() {
return numPoints;
}
@Override
- public int getDocCount(String fieldName) {
- if (fieldName.equals(fieldInfo.name) == false) {
- throw new IllegalArgumentException("fieldName must be the same");
- }
+ public int getDocCount() {
return numDocs;
}
@@ -170,6 +147,31 @@ class PointValuesWriter {
}
};
+ PointsReader reader = new PointsReader() {
+
+ @Override
+ public PointValues getValues(String fieldName) {
+ if (fieldName.equals(fieldInfo.name) == false) {
+ throw new IllegalArgumentException("fieldName must be the same");
+ }
+ return values;
+ }
+
+ @Override
+ public void checkIntegrity() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public long ramBytesUsed() {
+ return 0L;
+ }
+
+ @Override
+ public void close() {
+ }
+ };
+
writer.writeField(fieldInfo, reader);
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java b/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
index ebbca4f..b01f0b8 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
@@ -230,7 +230,7 @@ public final class SegmentReader extends CodecReader {
}
@Override
- public PointValues getPointValues() {
+ public PointsReader getPointsReader() {
ensureOpen();
return core.pointsReader;
}
@@ -254,12 +254,6 @@ public final class SegmentReader extends CodecReader {
}
@Override
- public PointsReader getPointsReader() {
- ensureOpen();
- return core.pointsReader;
- }
-
- @Override
public String toString() {
// SegmentInfo.toString takes dir and number of
// *pending* deletions; so we reverse compute that here:
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java b/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java
index 618d375..d5b5c33 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java
@@ -93,13 +93,8 @@ public final class SlowCodecReaderWrapper {
}
@Override
- public PointValues getPointValues() {
- return reader.getPointValues();
- }
-
- @Override
public PointsReader getPointsReader() {
- return pointValuesToReader(reader.getPointValues());
+ return pointValuesToReader(reader);
}
@Override
@@ -140,14 +135,12 @@ public final class SlowCodecReaderWrapper {
}
}
- private static PointsReader pointValuesToReader(PointValues values) {
- if (values == null) {
- return null;
- }
+ private static PointsReader pointValuesToReader(LeafReader reader) {
return new PointsReader() {
+
@Override
- public void intersect(String fieldName, IntersectVisitor visitor) throws IOException {
- values.intersect(fieldName, visitor);
+ public PointValues getValues(String field) throws IOException {
+ return reader.getPointValues(field);
}
@Override
@@ -164,35 +157,6 @@ public final class SlowCodecReaderWrapper {
return 0;
}
- @Override
- public byte[] getMinPackedValue(String fieldName) throws IOException {
- return values.getMinPackedValue(fieldName);
- }
-
- @Override
- public byte[] getMaxPackedValue(String fieldName) throws IOException {
- return values.getMaxPackedValue(fieldName);
- }
-
- @Override
- public int getNumDimensions(String fieldName) throws IOException {
- return values.getNumDimensions(fieldName);
- }
-
- @Override
- public int getBytesPerDimension(String fieldName) throws IOException {
- return values.getBytesPerDimension(fieldName);
- }
-
- @Override
- public long size(String fieldName) {
- return values.size(fieldName);
- }
-
- @Override
- public int getDocCount(String fieldName) {
- return values.getDocCount(fieldName);
- }
};
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/index/SortingLeafReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/SortingLeafReader.java b/lucene/core/src/java/org/apache/lucene/index/SortingLeafReader.java
index b207432..8139ed1 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SortingLeafReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SortingLeafReader.java
@@ -297,9 +297,8 @@ class SortingLeafReader extends FilterLeafReader {
}
@Override
- public void intersect(String fieldName, IntersectVisitor visitor) throws IOException {
- in.intersect(fieldName,
- new IntersectVisitor() {
+ public void intersect(IntersectVisitor visitor) throws IOException {
+ in.intersect(new IntersectVisitor() {
@Override
public void visit(int docID) throws IOException {
visitor.visit(docMap.oldToNew(docID));
@@ -318,33 +317,33 @@ class SortingLeafReader extends FilterLeafReader {
}
@Override
- public byte[] getMinPackedValue(String fieldName) throws IOException {
- return in.getMinPackedValue(fieldName);
+ public byte[] getMinPackedValue() throws IOException {
+ return in.getMinPackedValue();
}
@Override
- public byte[] getMaxPackedValue(String fieldName) throws IOException {
- return in.getMaxPackedValue(fieldName);
+ public byte[] getMaxPackedValue() throws IOException {
+ return in.getMaxPackedValue();
}
@Override
- public int getNumDimensions(String fieldName) throws IOException {
- return in.getNumDimensions(fieldName);
+ public int getNumDimensions() throws IOException {
+ return in.getNumDimensions();
}
@Override
- public int getBytesPerDimension(String fieldName) throws IOException {
- return in.getBytesPerDimension(fieldName);
+ public int getBytesPerDimension() throws IOException {
+ return in.getBytesPerDimension();
}
@Override
- public long size(String fieldName) {
- return in.size(fieldName);
+ public long size() {
+ return in.size();
}
@Override
- public int getDocCount(String fieldName) {
- return in.getDocCount(fieldName);
+ public int getDocCount() {
+ return in.getDocCount();
}
}
@@ -1049,8 +1048,8 @@ class SortingLeafReader extends FilterLeafReader {
}
@Override
- public PointValues getPointValues() {
- final PointValues inPointValues = in.getPointValues();
+ public PointValues getPointValues(String fieldName) throws IOException {
+ final PointValues inPointValues = in.getPointValues(fieldName);
if (inPointValues == null) {
return null;
} else {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/search/PointInSetQuery.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/PointInSetQuery.java b/lucene/core/src/java/org/apache/lucene/search/PointInSetQuery.java
index d41b91c..f37d21d 100644
--- a/lucene/core/src/java/org/apache/lucene/search/PointInSetQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/search/PointInSetQuery.java
@@ -23,7 +23,6 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;
import org.apache.lucene.document.IntPoint;
-import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.LeafReader;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.PointValues.IntersectVisitor;
@@ -116,21 +115,18 @@ public abstract class PointInSetQuery extends Query {
@Override
public Scorer scorer(LeafReaderContext context) throws IOException {
LeafReader reader = context.reader();
- PointValues values = reader.getPointValues();
+
+ PointValues values = reader.getPointValues(field);
if (values == null) {
- // No docs in this segment indexed any points
- return null;
- }
- FieldInfo fieldInfo = reader.getFieldInfos().fieldInfo(field);
- if (fieldInfo == null) {
- // No docs in this segment indexed this field at all
+ // No docs in this segment/field indexed any points
return null;
}
- if (fieldInfo.getPointDimensionCount() != numDims) {
- throw new IllegalArgumentException("field=\"" + field + "\" was indexed with numDims=" + fieldInfo.getPointDimensionCount() + " but this query has numDims=" + numDims);
+
+ if (values.getNumDimensions() != numDims) {
+ throw new IllegalArgumentException("field=\"" + field + "\" was indexed with numDims=" + values.getNumDimensions() + " but this query has numDims=" + numDims);
}
- if (fieldInfo.getPointNumBytes() != bytesPerDim) {
- throw new IllegalArgumentException("field=\"" + field + "\" was indexed with bytesPerDim=" + fieldInfo.getPointNumBytes() + " but this query has bytesPerDim=" + bytesPerDim);
+ if (values.getBytesPerDimension() != bytesPerDim) {
+ throw new IllegalArgumentException("field=\"" + field + "\" was indexed with bytesPerDim=" + values.getBytesPerDimension() + " but this query has bytesPerDim=" + bytesPerDim);
}
DocIdSetBuilder result = new DocIdSetBuilder(reader.maxDoc(), values, field);
@@ -138,7 +134,7 @@ public abstract class PointInSetQuery extends Query {
if (numDims == 1) {
// We optimize this common case, effectively doing a merge sort of the indexed values vs the queried set:
- values.intersect(field, new MergePointVisitor(sortedPackedPoints, result));
+ values.intersect(new MergePointVisitor(sortedPackedPoints, result));
} else {
// NOTE: this is naive implementation, where for each point we re-walk the KD tree to intersect. We could instead do a similar
@@ -148,7 +144,7 @@ public abstract class PointInSetQuery extends Query {
TermIterator iterator = sortedPackedPoints.iterator();
for (BytesRef point = iterator.next(); point != null; point = iterator.next()) {
visitor.setPoint(point);
- values.intersect(field, visitor);
+ values.intersect(visitor);
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/search/PointRangeQuery.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/PointRangeQuery.java b/lucene/core/src/java/org/apache/lucene/search/PointRangeQuery.java
index 1cd2d35..5fd0167 100644
--- a/lucene/core/src/java/org/apache/lucene/search/PointRangeQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/search/PointRangeQuery.java
@@ -24,7 +24,6 @@ import org.apache.lucene.index.PointValues;
import org.apache.lucene.index.PointValues.IntersectVisitor;
import org.apache.lucene.index.PointValues.Relation;
import org.apache.lucene.document.IntPoint; // javadocs
-import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.LeafReader;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.util.DocIdSetBuilder;
@@ -108,7 +107,7 @@ public abstract class PointRangeQuery extends Query {
private DocIdSet buildMatchingDocIdSet(LeafReader reader, PointValues values) throws IOException {
DocIdSetBuilder result = new DocIdSetBuilder(reader.maxDoc(), values, field);
- values.intersect(field,
+ values.intersect(
new IntersectVisitor() {
DocIdSetBuilder.BulkAdder adder;
@@ -171,27 +170,24 @@ public abstract class PointRangeQuery extends Query {
@Override
public Scorer scorer(LeafReaderContext context) throws IOException {
LeafReader reader = context.reader();
- PointValues values = reader.getPointValues();
+
+ PointValues values = reader.getPointValues(field);
if (values == null) {
- // No docs in this segment indexed any points
- return null;
- }
- FieldInfo fieldInfo = reader.getFieldInfos().fieldInfo(field);
- if (fieldInfo == null) {
- // No docs in this segment indexed this field at all
+ // No docs in this segment/field indexed any points
return null;
}
- if (fieldInfo.getPointDimensionCount() != numDims) {
- throw new IllegalArgumentException("field=\"" + field + "\" was indexed with numDims=" + fieldInfo.getPointDimensionCount() + " but this query has numDims=" + numDims);
+
+ if (values.getNumDimensions() != numDims) {
+ throw new IllegalArgumentException("field=\"" + field + "\" was indexed with numDims=" + values.getNumDimensions() + " but this query has numDims=" + numDims);
}
- if (bytesPerDim != fieldInfo.getPointNumBytes()) {
- throw new IllegalArgumentException("field=\"" + field + "\" was indexed with bytesPerDim=" + fieldInfo.getPointNumBytes() + " but this query has bytesPerDim=" + bytesPerDim);
+ if (bytesPerDim != values.getBytesPerDimension()) {
+ throw new IllegalArgumentException("field=\"" + field + "\" was indexed with bytesPerDim=" + values.getBytesPerDimension() + " but this query has bytesPerDim=" + bytesPerDim);
}
boolean allDocsMatch;
- if (values.getDocCount(field) == reader.maxDoc()) {
- final byte[] fieldPackedLower = values.getMinPackedValue(field);
- final byte[] fieldPackedUpper = values.getMaxPackedValue(field);
+ if (values.getDocCount() == reader.maxDoc()) {
+ final byte[] fieldPackedLower = values.getMinPackedValue();
+ final byte[] fieldPackedUpper = values.getMaxPackedValue();
allDocsMatch = true;
for (int i = 0; i < numDims; ++i) {
int offset = i * bytesPerDim;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/util/DocIdSetBuilder.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/util/DocIdSetBuilder.java b/lucene/core/src/java/org/apache/lucene/util/DocIdSetBuilder.java
index e56e211..954614b 100644
--- a/lucene/core/src/java/org/apache/lucene/util/DocIdSetBuilder.java
+++ b/lucene/core/src/java/org/apache/lucene/util/DocIdSetBuilder.java
@@ -116,7 +116,7 @@ public final class DocIdSetBuilder {
/** Create a {@link DocIdSetBuilder} instance that is optimized for
* accumulating docs that match the given {@link PointValues}. */
public DocIdSetBuilder(int maxDoc, PointValues values, String field) throws IOException {
- this(maxDoc, values.getDocCount(field), values.size(field));
+ this(maxDoc, values.getDocCount(), values.size());
}
DocIdSetBuilder(int maxDoc, int docCount, long valueCount) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/util/bkd/BKDReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/util/bkd/BKDReader.java b/lucene/core/src/java/org/apache/lucene/util/bkd/BKDReader.java
index 9ca0bb4..0fe549a 100644
--- a/lucene/core/src/java/org/apache/lucene/util/bkd/BKDReader.java
+++ b/lucene/core/src/java/org/apache/lucene/util/bkd/BKDReader.java
@@ -21,8 +21,7 @@ import java.util.Arrays;
import org.apache.lucene.codecs.CodecUtil;
import org.apache.lucene.index.CorruptIndexException;
-import org.apache.lucene.index.PointValues.IntersectVisitor;
-import org.apache.lucene.index.PointValues.Relation;
+import org.apache.lucene.index.PointValues;
import org.apache.lucene.store.IndexInput;
import org.apache.lucene.util.Accountable;
import org.apache.lucene.util.BytesRef;
@@ -32,7 +31,7 @@ import org.apache.lucene.util.StringHelper;
*
* @lucene.experimental */
-public class BKDReader implements Accountable {
+public class BKDReader extends PointValues implements Accountable {
// Packed array of byte[] holding all split values in the full binary tree:
final private byte[] splitPackedValues;
final long[] leafBlockFPs;
@@ -496,26 +495,32 @@ public class BKDReader implements Accountable {
leafBlockFPs.length * Long.BYTES;
}
+ @Override
public byte[] getMinPackedValue() {
return minPackedValue.clone();
}
+ @Override
public byte[] getMaxPackedValue() {
return maxPackedValue.clone();
}
+ @Override
public int getNumDimensions() {
return numDims;
}
+ @Override
public int getBytesPerDimension() {
return bytesPerDim;
}
- public long getPointCount() {
+ @Override
+ public long size() {
return pointCount;
}
+ @Override
public int getDocCount() {
return docCount;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/util/bkd/BKDWriter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/util/bkd/BKDWriter.java b/lucene/core/src/java/org/apache/lucene/util/bkd/BKDWriter.java
index 88a84e9..6ee178b 100644
--- a/lucene/core/src/java/org/apache/lucene/util/bkd/BKDWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/util/bkd/BKDWriter.java
@@ -25,7 +25,7 @@ import java.util.List;
import java.util.function.IntFunction;
import org.apache.lucene.codecs.CodecUtil;
-import org.apache.lucene.codecs.MutablePointsReader;
+import org.apache.lucene.codecs.MutablePointValues;
import org.apache.lucene.index.MergeState;
import org.apache.lucene.index.PointValues.IntersectVisitor;
import org.apache.lucene.index.PointValues.Relation;
@@ -417,12 +417,12 @@ public class BKDWriter implements Closeable {
}
}
- /** Write a field from a {@link MutablePointsReader}. This way of writing
+ /** Write a field from a {@link MutablePointValues}. This way of writing
* points is faster than regular writes with {@link BKDWriter#add} since
* there is opportunity for reordering points before writing them to
* disk. This method does not use transient disk in order to reorder points.
*/
- public long writeField(IndexOutput out, String fieldName, MutablePointsReader reader) throws IOException {
+ public long writeField(IndexOutput out, String fieldName, MutablePointValues reader) throws IOException {
if (numDims == 1) {
return writeField1Dim(out, fieldName, reader);
} else {
@@ -433,7 +433,7 @@ public class BKDWriter implements Closeable {
/* In the 2+D case, we recursively pick the split dimension, compute the
* median value and partition other values around it. */
- private long writeFieldNDims(IndexOutput out, String fieldName, MutablePointsReader reader) throws IOException {
+ private long writeFieldNDims(IndexOutput out, String fieldName, MutablePointValues values) throws IOException {
if (pointCount != 0) {
throw new IllegalStateException("cannot mix add and writeField");
}
@@ -446,7 +446,7 @@ public class BKDWriter implements Closeable {
// Mark that we already finished:
heapPointWriter = null;
- long countPerLeaf = pointCount = reader.size(fieldName);
+ long countPerLeaf = pointCount = values.size();
long innerNodeCount = 1;
while (countPerLeaf > maxPointsInLeafNode) {
@@ -465,7 +465,7 @@ public class BKDWriter implements Closeable {
Arrays.fill(minPackedValue, (byte) 0xff);
Arrays.fill(maxPackedValue, (byte) 0);
for (int i = 0; i < Math.toIntExact(pointCount); ++i) {
- reader.getValue(i, scratchBytesRef1);
+ values.getValue(i, scratchBytesRef1);
for(int dim=0;dim<numDims;dim++) {
int offset = dim*bytesPerDim;
if (StringHelper.compare(bytesPerDim, scratchBytesRef1.bytes, scratchBytesRef1.offset + offset, minPackedValue, offset) < 0) {
@@ -476,10 +476,10 @@ public class BKDWriter implements Closeable {
}
}
- docsSeen.set(reader.getDocID(i));
+ docsSeen.set(values.getDocID(i));
}
- build(1, numLeaves, reader, 0, Math.toIntExact(pointCount), out,
+ build(1, numLeaves, values, 0, Math.toIntExact(pointCount), out,
minPackedValue, maxPackedValue, splitPackedValues, leafBlockFPs,
new int[maxPointsInLeafNode]);
@@ -491,12 +491,12 @@ public class BKDWriter implements Closeable {
/* In the 1D case, we can simply sort points in ascending order and use the
* same writing logic as we use at merge time. */
- private long writeField1Dim(IndexOutput out, String fieldName, MutablePointsReader reader) throws IOException {
- MutablePointsReaderUtils.sort(maxDoc, packedBytesLength, reader, 0, Math.toIntExact(reader.size(fieldName)));
+ private long writeField1Dim(IndexOutput out, String fieldName, MutablePointValues reader) throws IOException {
+ MutablePointsReaderUtils.sort(maxDoc, packedBytesLength, reader, 0, Math.toIntExact(reader.size()));
final OneDimensionBKDWriter oneDimWriter = new OneDimensionBKDWriter(out);
- reader.intersect(fieldName, new IntersectVisitor() {
+ reader.intersect(new IntersectVisitor() {
@Override
public void visit(int docID, byte[] packedValue) throws IOException {
@@ -1238,7 +1238,7 @@ public class BKDWriter implements Closeable {
/* Recursively reorders the provided reader and writes the bkd-tree on the fly. */
private void build(int nodeID, int leafNodeOffset,
- MutablePointsReader reader, int from, int to,
+ MutablePointValues reader, int from, int to,
IndexOutput out,
byte[] minPackedValue, byte[] maxPackedValue,
byte[] splitPackedValues,
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/java/org/apache/lucene/util/bkd/MutablePointsReaderUtils.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/util/bkd/MutablePointsReaderUtils.java b/lucene/core/src/java/org/apache/lucene/util/bkd/MutablePointsReaderUtils.java
index b439208..132ad3c 100644
--- a/lucene/core/src/java/org/apache/lucene/util/bkd/MutablePointsReaderUtils.java
+++ b/lucene/core/src/java/org/apache/lucene/util/bkd/MutablePointsReaderUtils.java
@@ -16,7 +16,7 @@
*/
package org.apache.lucene.util.bkd;
-import org.apache.lucene.codecs.MutablePointsReader;
+import org.apache.lucene.codecs.MutablePointValues;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IntroSelector;
import org.apache.lucene.util.IntroSorter;
@@ -30,9 +30,9 @@ final class MutablePointsReaderUtils {
MutablePointsReaderUtils() {}
- /** Sort the given {@link MutablePointsReader} based on its packed value then doc ID. */
+ /** Sort the given {@link MutablePointValues} based on its packed value then doc ID. */
static void sort(int maxDoc, int packedBytesLength,
- MutablePointsReader reader, int from, int to) {
+ MutablePointValues reader, int from, int to) {
final int bitsPerDocId = PackedInts.bitsRequired(maxDoc - 1);
new MSBRadixSorter(packedBytesLength + (bitsPerDocId + 7) / 8) {
@@ -89,7 +89,7 @@ final class MutablePointsReaderUtils {
/** Sort points on the given dimension. */
static void sortByDim(int sortedDim, int bytesPerDim, int[] commonPrefixLengths,
- MutablePointsReader reader, int from, int to,
+ MutablePointValues reader, int from, int to,
BytesRef scratch1, BytesRef scratch2) {
// No need for a fancy radix sort here, this is called on the leaves only so
@@ -128,7 +128,7 @@ final class MutablePointsReaderUtils {
* than or equal to it and all values on the right must be greater than or
* equal to it. */
static void partition(int maxDoc, int splitDim, int bytesPerDim, int commonPrefixLen,
- MutablePointsReader reader, int from, int to, int mid,
+ MutablePointValues reader, int from, int to, int mid,
BytesRef scratch1, BytesRef scratch2) {
final int offset = splitDim * bytesPerDim + commonPrefixLen;
final int cmpBytes = bytesPerDim - commonPrefixLen;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c22725f0/lucene/core/src/test/org/apache/lucene/index/Test2BPoints.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/Test2BPoints.java b/lucene/core/src/test/org/apache/lucene/index/Test2BPoints.java
index aeef023..2e32773 100644
--- a/lucene/core/src/test/org/apache/lucene/index/Test2BPoints.java
+++ b/lucene/core/src/test/org/apache/lucene/index/Test2BPoints.java
@@ -78,7 +78,7 @@ public class Test2BPoints extends LuceneTestCase {
DirectoryReader r = DirectoryReader.open(w);
IndexSearcher s = new IndexSearcher(r);
assertEquals(numDocs, s.count(LongPoint.newRangeQuery("long", Long.MIN_VALUE, Long.MAX_VALUE)));
- assertTrue(r.leaves().get(0).reader().getPointValues().size("long") > Integer.MAX_VALUE);
+ assertTrue(r.leaves().get(0).reader().getPointValues("long").size() > Integer.MAX_VALUE);
r.close();
w.close();
System.out.println("TEST: now CheckIndex");
@@ -126,7 +126,7 @@ public class Test2BPoints extends LuceneTestCase {
DirectoryReader r = DirectoryReader.open(w);
IndexSearcher s = new IndexSearcher(r);
assertEquals(numDocs, s.count(LongPoint.newRangeQuery("long", new long[] {Long.MIN_VALUE, Long.MIN_VALUE}, new long[] {Long.MAX_VALUE, Long.MAX_VALUE})));
- assertTrue(r.leaves().get(0).reader().getPointValues().size("long") > Integer.MAX_VALUE);
+ assertTrue(r.leaves().get(0).reader().getPointValues("long").size() > Integer.MAX_VALUE);
r.close();
w.close();
System.out.println("TEST: now CheckIndex");