You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2016/03/03 12:08:40 UTC

[1/9] lucene-solr git commit: add PointValues.size() stat, to return total number of points

Repository: lucene-solr
Updated Branches:
  refs/heads/master a2120730a -> 4c4313889


add PointValues.size() stat, to return total number of points


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/3c02ab21
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/3c02ab21
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/3c02ab21

Branch: refs/heads/master
Commit: 3c02ab21870c44250a2bc28262726459b220615e
Parents: b17c57f
Author: Mike McCandless <mi...@apache.org>
Authored: Wed Mar 2 17:53:28 2016 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Wed Mar 2 17:53:28 2016 -0500

----------------------------------------------------------------------
 .../codecs/simpletext/SimpleTextBKDReader.java  |   4 +-
 .../simpletext/SimpleTextPointReader.java       |  18 +-
 .../simpletext/SimpleTextPointWriter.java       |   5 +
 .../org/apache/lucene/codecs/PointFormat.java   |   5 +
 .../org/apache/lucene/codecs/PointWriter.java   |   6 +
 .../codecs/lucene60/Lucene60PointReader.java    |  11 ++
 .../org/apache/lucene/index/CheckIndex.java     |  79 +++++++--
 .../apache/lucene/index/MultiPointValues.java   | 172 -------------------
 .../apache/lucene/index/ParallelLeafReader.java |  13 ++
 .../org/apache/lucene/index/PointValues.java    |   9 +-
 .../apache/lucene/index/PointValuesWriter.java  |   5 +
 .../lucene/index/SlowCodecReaderWrapper.java    |   5 +
 .../org/apache/lucene/util/bkd/BKDReader.java   |  16 +-
 .../org/apache/lucene/util/bkd/BKDWriter.java   |  15 +-
 .../codecs/asserting/AssertingPointFormat.java  |  11 +-
 .../lucene/codecs/cranky/CrankyPointFormat.java |   5 +
 16 files changed, 171 insertions(+), 208 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/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 d0ab81e..6752393 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
@@ -34,8 +34,8 @@ import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.BLOCK_VA
 class SimpleTextBKDReader extends BKDReader {
 
   public SimpleTextBKDReader(IndexInput datIn, int numDims, int maxPointsInLeafNode, int bytesPerDim, long[] leafBlockFPs, byte[] splitPackedValues,
-                             byte[] minPackedValue, byte[] maxPackedValue) throws IOException {
-    super(datIn, numDims, maxPointsInLeafNode, bytesPerDim, leafBlockFPs, splitPackedValues, minPackedValue, maxPackedValue);
+                             byte[] minPackedValue, byte[] maxPackedValue, long pointCount) throws IOException {
+    super(datIn, numDims, maxPointsInLeafNode, bytesPerDim, leafBlockFPs, splitPackedValues, minPackedValue, maxPackedValue, pointCount);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointReader.java
----------------------------------------------------------------------
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointReader.java
index 0ec2e03..76c0431 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointReader.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointReader.java
@@ -47,6 +47,7 @@ import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.MAX_LEAF
 import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.MAX_VALUE;
 import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.MIN_VALUE;
 import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.NUM_DIMS;
+import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.POINT_COUNT;
 import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.SPLIT_COUNT;
 import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.SPLIT_DIM;
 import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.SPLIT_VALUE;
@@ -119,6 +120,10 @@ class SimpleTextPointReader extends PointReader {
     assert startsWith(MAX_VALUE);
     BytesRef maxValue = SimpleTextUtil.fromBytesRefString(stripPrefix(MAX_VALUE));
     assert maxValue.length == numDims*bytesPerDim;
+
+    readLine(dataIn);
+    assert startsWith(POINT_COUNT);
+    long pointCount = parseLong(POINT_COUNT);
     
     long[] leafBlockFPs = new long[count];
     for(int i=0;i<count;i++) {
@@ -139,7 +144,7 @@ class SimpleTextPointReader extends PointReader {
       System.arraycopy(br.bytes, br.offset, splitPackedValues, (1 + bytesPerDim) * i + 1, bytesPerDim);
     }
 
-    return new SimpleTextBKDReader(dataIn, numDims, maxPointsInLeafNode, bytesPerDim, leafBlockFPs, splitPackedValues, minValue.bytes, maxValue.bytes);
+    return new SimpleTextBKDReader(dataIn, numDims, maxPointsInLeafNode, bytesPerDim, leafBlockFPs, splitPackedValues, minValue.bytes, maxValue.bytes, pointCount);
   }
 
   private void readLine(IndexInput in) throws IOException {
@@ -267,4 +272,15 @@ class SimpleTextPointReader extends PointReader {
     }
     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();
+  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointWriter.java
----------------------------------------------------------------------
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointWriter.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointWriter.java
index 0c5a3fc..abc0b5e 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointWriter.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointWriter.java
@@ -51,6 +51,7 @@ class SimpleTextPointWriter extends PointWriter {
   final static BytesRef FIELD_FP      = new BytesRef("  field fp ");
   final static BytesRef MIN_VALUE     = new BytesRef("min value ");
   final static BytesRef MAX_VALUE     = new BytesRef("max value ");
+  final static BytesRef POINT_COUNT   = new BytesRef("point count ");
 
   private IndexOutput dataOut;
   final BytesRefBuilder scratch = new BytesRefBuilder();
@@ -102,6 +103,10 @@ class SimpleTextPointWriter extends PointWriter {
           write(out, br.toString());
           newline(out);
 
+          write(out, POINT_COUNT);
+          writeLong(out, pointCount);
+          newline(out);
+
           for(int i=0;i<leafBlockFPs.length;i++) {
             write(out, BLOCK_FP);
             writeLong(out, leafBlockFPs[i]);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/lucene/core/src/java/org/apache/lucene/codecs/PointFormat.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/PointFormat.java b/lucene/core/src/java/org/apache/lucene/codecs/PointFormat.java
index 1d48358..fc015d5 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/PointFormat.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/PointFormat.java
@@ -95,6 +95,11 @@ public abstract class PointFormat {
           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");
+          }
         };
       }
     };

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/lucene/core/src/java/org/apache/lucene/codecs/PointWriter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/PointWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/PointWriter.java
index 21d9044..2224c52 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/PointWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/PointWriter.java
@@ -115,6 +115,12 @@ public abstract class PointWriter implements Closeable {
                  public int getBytesPerDimension(String fieldName) {
                    throw new UnsupportedOperationException();
                  }
+
+                 @Override
+                 public long size(String fieldName) {
+                   throw new UnsupportedOperationException();
+                 }
+
                });
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointReader.java
index 2e9206a..e493030 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointReader.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointReader.java
@@ -215,5 +215,16 @@ public class Lucene60PointReader extends PointReader implements Closeable {
     }
     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();
+  }
 }
   

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/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 9f711df..c25531c 100644
--- a/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
+++ b/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
@@ -1698,15 +1698,31 @@ public final class CheckIndex implements Closeable {
             status.totalValueFields++;
             int dimCount = fieldInfo.getPointDimensionCount();
             int bytesPerDim = fieldInfo.getPointNumBytes();
-            byte[] lastMinPackedValue = new byte[dimCount*bytesPerDim];
-            BytesRef lastMinPacked = new BytesRef(lastMinPackedValue);
-            byte[] lastMaxPackedValue = new byte[dimCount*bytesPerDim];
-            BytesRef lastMaxPacked = new BytesRef(lastMaxPackedValue);
+            int packedBytesCount = dimCount * bytesPerDim;
+            byte[] lastMinPackedValue = new byte[packedBytesCount];
+            byte[] lastMaxPackedValue = new byte[packedBytesCount];
             BytesRef scratch = new BytesRef();
-            lastMaxPacked.length = bytesPerDim;
-            lastMinPacked.length = bytesPerDim;
             scratch.length = bytesPerDim;
-            byte[] lastPackedValue = new byte[dimCount*bytesPerDim];
+            byte[] lastPackedValue = new byte[packedBytesCount];
+
+            long[] pointCountSeen = new long[1];
+
+            byte[] globalMinPackedValue = values.getMinPackedValue(fieldInfo.name);
+            long size = values.size(fieldInfo.name);
+            if (globalMinPackedValue == null && size != 0) {
+              throw new RuntimeException("getMinPackedValue is null points for field \"" + fieldInfo.name + "\" yet size=" + size);
+            }
+            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);
+            if (globalMaxPackedValue == null && size != 0) {
+              throw new RuntimeException("getMaxPackedValue is null points for field \"" + fieldInfo.name + "\" yet size=" + size);
+            }
+            if (globalMaxPackedValue.length != packedBytesCount) {
+              throw new RuntimeException("getMaxPackedValue for field \"" + fieldInfo.name + "\" return length=" + globalMaxPackedValue.length + " array, but should be " + packedBytesCount);
+            }
+
             values.intersect(fieldInfo.name,
                              new PointValues.IntersectVisitor() {
 
@@ -1720,18 +1736,18 @@ public final class CheckIndex implements Closeable {
                                @Override
                                public void visit(int docID, byte[] packedValue) {
                                  checkPackedValue("packed value", packedValue, docID);
-                                 scratch.bytes = packedValue;
+                                 pointCountSeen[0]++;
 
                                  for(int dim=0;dim<dimCount;dim++) {
-                                   lastMaxPacked.offset = bytesPerDim * dim;
-                                   lastMinPacked.offset = bytesPerDim * dim;
-                                   scratch.offset = bytesPerDim * dim;
+                                   int offset = bytesPerDim * dim;
 
-                                   if (scratch.compareTo(lastMinPacked) < 0) {
+                                   // Compare to last cell:
+                                   if (StringHelper.compare(bytesPerDim, packedValue, offset, lastMinPackedValue, offset) < 0) {
                                      // This doc's point, in this dimension, is lower than the minimum value of the last cell checked:
                                      throw new RuntimeException("packed points value " + Arrays.toString(packedValue) + " for docID=" + docID + " is out-of-bounds of the last cell min=" + Arrays.toString(lastMinPackedValue) + " max=" + Arrays.toString(lastMaxPackedValue) + " dim=" + dim);
                                    }
-                                   if (scratch.compareTo(lastMaxPacked) > 0) {
+
+                                   if (StringHelper.compare(bytesPerDim, packedValue, offset, lastMaxPackedValue, offset) > 0) {
                                      // This doc's point, in this dimension, is greater than the maximum value of the last cell checked:
                                      throw new RuntimeException("packed points value " + Arrays.toString(packedValue) + " for docID=" + docID + " is out-of-bounds of the last cell min=" + Arrays.toString(lastMinPackedValue) + " max=" + Arrays.toString(lastMaxPackedValue) + " dim=" + dim);
                                    }
@@ -1758,9 +1774,33 @@ public final class CheckIndex implements Closeable {
                                @Override
                                public PointValues.Relation compare(byte[] minPackedValue, byte[] maxPackedValue) {
                                  checkPackedValue("min packed value", minPackedValue, -1);
-                                 System.arraycopy(minPackedValue, 0, lastMinPackedValue, 0, minPackedValue.length);
+                                 System.arraycopy(minPackedValue, 0, lastMinPackedValue, 0, packedBytesCount);
                                  checkPackedValue("max packed value", maxPackedValue, -1);
-                                 System.arraycopy(maxPackedValue, 0, lastMaxPackedValue, 0, maxPackedValue.length);
+                                 System.arraycopy(maxPackedValue, 0, lastMaxPackedValue, 0, packedBytesCount);
+
+                                 for(int dim=0;dim<dimCount;dim++) {
+                                   int offset = bytesPerDim * dim;
+
+                                   // Make sure this cell is not outside of the global min/max:
+                                   if (StringHelper.compare(bytesPerDim, minPackedValue, offset, globalMinPackedValue, offset) < 0) {
+                                     throw new RuntimeException("packed points cell minPackedValue " + Arrays.toString(minPackedValue) +
+                                                                " is out-of-bounds of the global minimum " + Arrays.toString(globalMinPackedValue) + " dim=" + dim);
+                                   }
+
+                                   if (StringHelper.compare(bytesPerDim, maxPackedValue, offset, globalMinPackedValue, offset) < 0) {
+                                     throw new RuntimeException("packed points cell maxPackedValue " + Arrays.toString(minPackedValue) +
+                                                                " is out-of-bounds of the global minimum " + Arrays.toString(globalMinPackedValue) + " dim=" + dim);
+                                   }
+
+                                   if (StringHelper.compare(bytesPerDim, minPackedValue, offset, globalMaxPackedValue, offset) > 0) {
+                                     throw new RuntimeException("packed points cell minPackedValue " + Arrays.toString(minPackedValue) +
+                                                                " is out-of-bounds of the global maximum " + Arrays.toString(globalMaxPackedValue) + " dim=" + dim);
+                                   }
+                                   if (StringHelper.compare(bytesPerDim, maxPackedValue, offset, globalMaxPackedValue, offset) > 0) {
+                                     throw new RuntimeException("packed points cell maxPackedValue " + Arrays.toString(maxPackedValue) +
+                                                                " is out-of-bounds of the global maximum " + Arrays.toString(globalMaxPackedValue) + " dim=" + dim);
+                                   }
+                                 }                                   
 
                                  // We always pretend the query shape is so complex that it crosses every cell, so
                                  // that packedValue is passed for every document
@@ -1772,11 +1812,16 @@ public final class CheckIndex implements Closeable {
                                    throw new RuntimeException(desc + " is null for docID=" + docID);
                                  }
 
-                                 if (packedValue.length != dimCount * bytesPerDim) {
-                                   throw new RuntimeException(desc + " has incorrect length=" + packedValue.length + " vs expected=" + (dimCount * bytesPerDim) + " for docID=" + docID);
+                                 if (packedValue.length != packedBytesCount) {
+                                   throw new RuntimeException(desc + " has incorrect length=" + packedValue.length + " vs expected=" + packedBytesCount + " for docID=" + docID);
                                  }
                                }
                              });
+
+            if (pointCountSeen[0] != size) {
+              System.out.println("HERE: " + values);
+              throw new RuntimeException("point values for field \"" + fieldInfo.name + "\" claims to have size=" + size + " points, but in fact has " + pointCountSeen[0]);
+            }
           }
         }
       }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/lucene/core/src/java/org/apache/lucene/index/MultiPointValues.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/MultiPointValues.java b/lucene/core/src/java/org/apache/lucene/index/MultiPointValues.java
deleted file mode 100644
index dcc33da..0000000
--- a/lucene/core/src/java/org/apache/lucene/index/MultiPointValues.java
+++ /dev/null
@@ -1,172 +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.index;
-
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.lucene.util.StringHelper;
-
-/** Merges multiple {@link PointValues} into a single one. */
-public class MultiPointValues extends PointValues {
-
-  private final List<PointValues> subs;
-  private final List<Integer> docBases;
-
-  private MultiPointValues(List<PointValues> subs, List<Integer> docBases) {
-    this.subs = subs;
-    this.docBases = docBases;
-  }
-
-  /** Returns a {@link PointValues} merging all point values from the provided reader. */
-  public static PointValues get(IndexReader r) {
-    final List<LeafReaderContext> leaves = r.leaves();
-    final int size = leaves.size();
-    if (size == 0) {
-      return null;
-    } else if (size == 1) {
-      return leaves.get(0).reader().getPointValues();
-    }
-
-    List<PointValues> values = new ArrayList<>();
-    List<Integer> docBases = new ArrayList<>();
-    for (int i = 0; i < size; i++) {
-      LeafReaderContext context = leaves.get(i);
-      PointValues v = context.reader().getPointValues();
-      if (v != null) {
-        values.add(v);
-        docBases.add(context.docBase);
-      }
-    }
-
-    if (values.isEmpty()) {
-      return null;
-    }
-
-    return new MultiPointValues(values, docBases);
-  }
-
-  /** Finds all documents and points matching the provided visitor */
-  public void intersect(String fieldName, IntersectVisitor visitor) throws IOException {
-    for(int i=0;i<subs.size();i++) {
-      int docBase = docBases.get(i);
-      subs.get(i).intersect(fieldName,
-                        new IntersectVisitor() {
-                          @Override
-                          public void visit(int docID) throws IOException {
-                            visitor.visit(docBase+docID);
-                          }
-                          @Override
-                          public void visit(int docID, byte[] packedValue) throws IOException {
-                            visitor.visit(docBase+docID, packedValue);
-                          }
-                          @Override
-                          public Relation compare(byte[] minPackedValue, byte[] maxPackedValue) {
-                            return visitor.compare(minPackedValue, maxPackedValue);
-                          }
-                        });
-    }
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder b = new StringBuilder();
-    b.append("MultiPointValues(");
-    for(int i=0;i<subs.size();i++) {
-      if (i > 0) {
-        b.append(", ");
-      }
-      b.append("docBase=");
-      b.append(docBases.get(i));
-      b.append(" sub=" + subs.get(i));
-    }
-    b.append(')');
-    return b.toString();
-  }
-
-  @Override
-  public byte[] getMinPackedValue(String fieldName) throws IOException {
-    byte[] result = null;
-    for(int i=0;i<subs.size();i++) {
-      byte[] minPackedValue = subs.get(i).getMinPackedValue(fieldName);
-      if (result == null) {
-        if (minPackedValue != null) {
-          result = minPackedValue.clone();
-        }
-      } else {
-        int numDims = subs.get(0).getNumDimensions(fieldName);
-        int bytesPerDim = subs.get(0).getBytesPerDimension(fieldName);
-        for(int dim=0;dim<numDims;dim++) {
-          int offset = dim*bytesPerDim;
-          if (StringHelper.compare(bytesPerDim, minPackedValue, offset, result, offset) < 0) {
-            System.arraycopy(minPackedValue, offset, result, offset, bytesPerDim);
-          }
-        }
-      }
-    }
-
-    return result;
-  }
-
-  @Override
-  public byte[] getMaxPackedValue(String fieldName) throws IOException {
-    byte[] result = null;
-    for(int i=0;i<subs.size();i++) {
-      byte[] maxPackedValue = subs.get(i).getMaxPackedValue(fieldName);
-      if (result == null) {
-        if (maxPackedValue != null) {
-          result = maxPackedValue.clone();
-        }
-      } else {
-        int numDims = subs.get(0).getNumDimensions(fieldName);
-        int bytesPerDim = subs.get(0).getBytesPerDimension(fieldName);
-        for(int dim=0;dim<numDims;dim++) {
-          int offset = dim*bytesPerDim;
-          if (StringHelper.compare(bytesPerDim, maxPackedValue, offset, result, offset) > 0) {
-            System.arraycopy(maxPackedValue, offset, result, offset, bytesPerDim);
-          }
-        }
-      }
-    }
-
-    return result;
-  }
-
-  @Override
-  public int getNumDimensions(String fieldName) throws IOException {
-    for(int i=0;i<subs.size();i++) {
-      int result = subs.get(i).getNumDimensions(fieldName);
-      if (result != 0) {
-        return result;
-      }
-    }
-    return 0;
-  }
-
-  @Override
-  public int getBytesPerDimension(String fieldName) throws IOException {
-    for(int i=0;i<subs.size();i++) {
-      int result = subs.get(i).getBytesPerDimension(fieldName);
-      if (result != 0) {
-        return result;
-      }
-    }
-    return 0;
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/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 3d51a0b..c1d8ab7 100644
--- a/lucene/core/src/java/org/apache/lucene/index/ParallelLeafReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/ParallelLeafReader.java
@@ -381,6 +381,19 @@ public class ParallelLeafReader extends LeafReader {
         }
         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);
+      }
     };
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/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 34d315f..be049dd 100644
--- a/lucene/core/src/java/org/apache/lucene/index/PointValues.java
+++ b/lucene/core/src/java/org/apache/lucene/index/PointValues.java
@@ -80,10 +80,10 @@ public abstract class PointValues {
    *  to test whether each document is deleted, if necessary. */
   public abstract void intersect(String fieldName, IntersectVisitor visitor) throws IOException;
 
-  /** Returns minimum value for each dimension, packed, or null if no points were indexed */
+  /** Returns minimum value for each dimension, packed, or null if {@link #size} is <code>0</code> */
   public abstract byte[] getMinPackedValue(String fieldName) throws IOException;
 
-  /** Returns maximum value for each dimension, packed, or null if no points were indexed */
+  /** Returns maximum value for each dimension, packed, or null if {@link #size} is <code>0</code> */
   public abstract byte[] getMaxPackedValue(String fieldName) throws IOException;
 
   /** Returns how many dimensions were indexed */
@@ -91,4 +91,9 @@ public abstract class PointValues {
 
   /** Returns the number of bytes per dimension */
   public abstract int getBytesPerDimension(String fieldName) throws IOException;
+
+  /** Returns the total number of indexed points across all documents in this field. */
+  public abstract long size(String fieldName);
+
+  // nocommit make "delete all point docs then force merge" and then check stats test
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/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 2fa8b4f..fe3aa14 100644
--- a/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java
@@ -108,6 +108,11 @@ class PointValuesWriter {
                         public int getBytesPerDimension(String fieldName) {
                           throw new UnsupportedOperationException();
                         }
+
+                        @Override
+                        public long size(String fieldName) {
+                          throw new UnsupportedOperationException();
+                        }
                       });
   }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/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 50d9778..50f5ad7 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java
@@ -172,6 +172,11 @@ public final class SlowCodecReaderWrapper {
       public int getBytesPerDimension(String fieldName) throws IOException {
         return values.getBytesPerDimension(fieldName);
       }
+
+      @Override
+      public long size(String fieldName) {
+        return values.size(fieldName);
+      }
     };
   }
   

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/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 9d72599..424b81c 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
@@ -42,6 +42,7 @@ public class BKDReader implements Accountable {
   final int maxPointsInLeafNode;
   final byte[] minPackedValue;
   final byte[] maxPackedValue;
+  final long pointCount;
   protected final int packedBytesLength;
 
   /** Caller must pre-seek the provided {@link IndexInput} to the index location that {@link BKDWriter#finish} returned */
@@ -59,9 +60,12 @@ public class BKDReader implements Accountable {
 
     minPackedValue = new byte[packedBytesLength];
     maxPackedValue = new byte[packedBytesLength];
+
     in.readBytes(minPackedValue, 0, packedBytesLength);
     in.readBytes(maxPackedValue, 0, packedBytesLength);
 
+    pointCount = in.readVLong();
+
     splitPackedValues = new byte[(1+bytesPerDim)*numLeaves];
 
     // TODO: don't write split packed values[0]!
@@ -122,7 +126,7 @@ public class BKDReader implements Accountable {
 
   /** Called by consumers that have their own on-disk format for the index (e.g. SimpleText) */
   protected BKDReader(IndexInput in, int numDims, int maxPointsInLeafNode, int bytesPerDim, long[] leafBlockFPs, byte[] splitPackedValues,
-                      byte[] minPackedValue, byte[] maxPackedValue) throws IOException {
+                      byte[] minPackedValue, byte[] maxPackedValue, long pointCount) throws IOException {
     this.in = in;
     this.numDims = numDims;
     this.maxPointsInLeafNode = maxPointsInLeafNode;
@@ -133,6 +137,7 @@ public class BKDReader implements Accountable {
     this.splitPackedValues = splitPackedValues;
     this.minPackedValue = minPackedValue;
     this.maxPackedValue = maxPackedValue;
+    this.pointCount = pointCount;
     assert minPackedValue.length == packedBytesLength;
     assert maxPackedValue.length == packedBytesLength;
   }
@@ -275,10 +280,7 @@ public class BKDReader implements Accountable {
                                               packedBytesLength,
                                               maxPointsInLeafNode,
                                               visitor);
-    byte[] rootMinPacked = new byte[packedBytesLength];
-    byte[] rootMaxPacked = new byte[packedBytesLength];
-    Arrays.fill(rootMaxPacked, (byte) 0xff);
-    intersect(state, 1, rootMinPacked, rootMaxPacked);
+    intersect(state, 1, minPackedValue, maxPackedValue);
   }
 
   /** Fast path: this is called when the query box fully encompasses all cells under this node. */
@@ -430,4 +432,8 @@ public class BKDReader implements Accountable {
   public int getBytesPerDimension() {
     return bytesPerDim;
   }
+
+  public long getPointCount() {
+    return pointCount;
+  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/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 9d6ad97..0ccdf43 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
@@ -123,7 +123,7 @@ public class BKDWriter implements Closeable {
   /** Maximum per-dim values, packed */
   protected final byte[] maxPackedValue;
 
-  private long pointCount;
+  protected long pointCount;
 
   public BKDWriter(Directory tempDir, String tempFileNamePrefix, int numDims, int bytesPerDim) throws IOException {
     this(tempDir, tempFileNamePrefix, numDims, bytesPerDim, DEFAULT_MAX_POINTS_IN_LEAF_NODE, DEFAULT_MAX_MB_SORT_IN_HEAP);
@@ -428,7 +428,8 @@ public class BKDWriter implements Closeable {
       }
       System.arraycopy(reader.state.scratchPackedValue, 0, maxPackedValue, 0, packedBytesLength);
 
-      assert numDims > 1 || valueInOrder(valueCount++, lastPackedValue, reader.state.scratchPackedValue);
+      assert numDims > 1 || valueInOrder(valueCount, lastPackedValue, reader.state.scratchPackedValue);
+      valueCount++;
 
       if (leafCount == 0) {
         if (leafBlockFPs.size() > 0) {
@@ -478,6 +479,8 @@ public class BKDWriter implements Closeable {
       }
     }
 
+    pointCount = valueCount;
+
     long indexFP = out.getFilePointer();
 
     int numInnerNodes = leafBlockStartValues.size();
@@ -799,10 +802,6 @@ public class BKDWriter implements Closeable {
     // Sort all docs once by each dimension:
     PathSlice[] sortedPointWriters = new PathSlice[numDims];
 
-    byte[] minPacked = new byte[packedBytesLength];
-    byte[] maxPacked = new byte[packedBytesLength];
-    Arrays.fill(maxPacked, (byte) 0xff);
-
     boolean success = false;
     try {
       //long t0 = System.nanoTime();
@@ -822,7 +821,7 @@ public class BKDWriter implements Closeable {
 
       build(1, numLeaves, sortedPointWriters,
             ordBitSet, out,
-            minPacked, maxPacked,
+            minPackedValue, maxPackedValue,
             splitPackedValues,
             leafBlockFPs);
 
@@ -862,6 +861,8 @@ public class BKDWriter implements Closeable {
     out.writeBytes(minPackedValue, 0, packedBytesLength);
     out.writeBytes(maxPackedValue, 0, packedBytesLength);
 
+    out.writeVLong(pointCount);
+
     // TODO: for 1D case, don't waste the first byte of each split value (it's always 0)
 
     // NOTE: splitPackedValues[0] is unused, because nodeID is 1-based:

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java b/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java
index 15836de..71790fc 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java
@@ -31,6 +31,7 @@ import org.apache.lucene.index.PointValues;
 import org.apache.lucene.index.SegmentReadState;
 import org.apache.lucene.index.SegmentWriteState;
 import org.apache.lucene.util.Accountable;
+import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.StringHelper;
 import org.apache.lucene.util.TestUtil;
 
@@ -105,8 +106,8 @@ public final class AssertingPointFormat extends PointFormat {
 
       // This doc's packed value should be contained in the last cell passed to compare:
       for(int dim=0;dim<numDims;dim++) {
-        assert StringHelper.compare(bytesPerDim, lastMinPackedValue, dim*bytesPerDim, packedValue, dim*bytesPerDim) <= 0: "dim=" + dim + " of " +  numDims;
-        assert StringHelper.compare(bytesPerDim, lastMaxPackedValue, dim*bytesPerDim, packedValue, dim*bytesPerDim) >= 0: "dim=" + dim + " of " +  numDims;
+        assert StringHelper.compare(bytesPerDim, lastMinPackedValue, dim*bytesPerDim, packedValue, dim*bytesPerDim) <= 0: "dim=" + dim + " of " +  numDims + " value=" + new BytesRef(packedValue);
+        assert StringHelper.compare(bytesPerDim, lastMaxPackedValue, dim*bytesPerDim, packedValue, dim*bytesPerDim) >= 0: "dim=" + dim + " of " +  numDims + " value=" + new BytesRef(packedValue);
       }
 
       // TODO: we should assert that this "matches" whatever relation the last call to compare had returned
@@ -214,6 +215,12 @@ public final class AssertingPointFormat extends PointFormat {
     public int getBytesPerDimension(String fieldName) throws IOException {
       return in.getBytesPerDimension(fieldName);
     }
+
+    @Override
+    public long size(String fieldName) {
+      // TODO: what to assert?
+      return in.size(fieldName);
+    }
   }
 
   static class AssertingPointWriter extends PointWriter {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3c02ab21/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPointFormat.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPointFormat.java b/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPointFormat.java
index 6b83b1e..699fb3c 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPointFormat.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPointFormat.java
@@ -171,5 +171,10 @@ class CrankyPointFormat extends PointFormat {
     public long ramBytesUsed() {
       return delegate.ramBytesUsed();
     }
+
+    @Override
+    public long size(String fieldName) {
+      return delegate.size(fieldName);
+    }
   }
 }


[3/9] lucene-solr git commit: also add PointValues.getDocCount stat, and check it in CheckIndex

Posted by mi...@apache.org.
also add PointValues.getDocCount stat, and check it in CheckIndex


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/b5475d10
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/b5475d10
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/b5475d10

Branch: refs/heads/master
Commit: b5475d10e1b5ef3c07389f36bbe72c9cd5f962d5
Parents: 85dbdb7
Author: Mike McCandless <mi...@apache.org>
Authored: Wed Mar 2 18:39:57 2016 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Wed Mar 2 18:39:57 2016 -0500

----------------------------------------------------------------------
 .../codecs/simpletext/SimpleTextBKDReader.java    |  4 ++--
 .../codecs/simpletext/SimpleTextPointReader.java  | 18 +++++++++++++++++-
 .../codecs/simpletext/SimpleTextPointWriter.java  | 18 ++++++++++++------
 .../org/apache/lucene/codecs/PointFormat.java     |  5 +++++
 .../org/apache/lucene/codecs/PointWriter.java     |  4 ++++
 .../codecs/lucene60/Lucene60PointReader.java      | 11 +++++++++++
 .../codecs/lucene60/Lucene60PointWriter.java      |  6 ++++--
 .../java/org/apache/lucene/index/CheckIndex.java  | 13 ++++++++++++-
 .../apache/lucene/index/ParallelLeafReader.java   | 13 +++++++++++++
 .../java/org/apache/lucene/index/PointValues.java |  3 ++-
 .../apache/lucene/index/PointValuesWriter.java    |  5 +++++
 .../lucene/index/SlowCodecReaderWrapper.java      |  5 +++++
 .../org/apache/lucene/util/bkd/BKDReader.java     |  9 ++++++++-
 .../org/apache/lucene/util/bkd/BKDWriter.java     | 16 ++++++++++++----
 .../test/org/apache/lucene/util/bkd/TestBKD.java  | 14 +++++++-------
 .../codecs/asserting/AssertingPointFormat.java    |  6 ++++++
 .../lucene/codecs/cranky/CrankyPointFormat.java   |  5 +++++
 17 files changed, 130 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/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 6752393..09c40ec 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
@@ -34,8 +34,8 @@ import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.BLOCK_VA
 class SimpleTextBKDReader extends BKDReader {
 
   public SimpleTextBKDReader(IndexInput datIn, int numDims, int maxPointsInLeafNode, int bytesPerDim, long[] leafBlockFPs, byte[] splitPackedValues,
-                             byte[] minPackedValue, byte[] maxPackedValue, long pointCount) throws IOException {
-    super(datIn, numDims, maxPointsInLeafNode, bytesPerDim, leafBlockFPs, splitPackedValues, minPackedValue, maxPackedValue, pointCount);
+                             byte[] minPackedValue, byte[] maxPackedValue, long pointCount, int docCount) throws IOException {
+    super(datIn, numDims, maxPointsInLeafNode, bytesPerDim, leafBlockFPs, splitPackedValues, minPackedValue, maxPackedValue, pointCount, docCount);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointReader.java
----------------------------------------------------------------------
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointReader.java
index 76c0431..05afd93 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointReader.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointReader.java
@@ -39,6 +39,7 @@ import org.apache.lucene.util.bkd.BKDReader;
 
 import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.BLOCK_FP;
 import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.BYTES_PER_DIM;
+import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.DOC_COUNT;
 import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.FIELD_COUNT;
 import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.FIELD_FP;
 import static org.apache.lucene.codecs.simpletext.SimpleTextPointWriter.FIELD_FP_NAME;
@@ -124,6 +125,10 @@ class SimpleTextPointReader extends PointReader {
     readLine(dataIn);
     assert startsWith(POINT_COUNT);
     long pointCount = parseLong(POINT_COUNT);
+
+    readLine(dataIn);
+    assert startsWith(DOC_COUNT);
+    int docCount = parseInt(DOC_COUNT);
     
     long[] leafBlockFPs = new long[count];
     for(int i=0;i<count;i++) {
@@ -144,7 +149,7 @@ class SimpleTextPointReader extends PointReader {
       System.arraycopy(br.bytes, br.offset, splitPackedValues, (1 + bytesPerDim) * i + 1, bytesPerDim);
     }
 
-    return new SimpleTextBKDReader(dataIn, numDims, maxPointsInLeafNode, bytesPerDim, leafBlockFPs, splitPackedValues, minValue.bytes, maxValue.bytes, pointCount);
+    return new SimpleTextBKDReader(dataIn, numDims, maxPointsInLeafNode, bytesPerDim, leafBlockFPs, splitPackedValues, minValue.bytes, maxValue.bytes, pointCount, docCount);
   }
 
   private void readLine(IndexInput in) throws IOException {
@@ -283,4 +288,15 @@ class SimpleTextPointReader extends PointReader {
     }
     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/b5475d10/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointWriter.java
----------------------------------------------------------------------
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointWriter.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointWriter.java
index abc0b5e..a20e487 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointWriter.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointWriter.java
@@ -52,6 +52,7 @@ class SimpleTextPointWriter extends PointWriter {
   final static BytesRef MIN_VALUE     = new BytesRef("min value ");
   final static BytesRef MAX_VALUE     = new BytesRef("max value ");
   final static BytesRef POINT_COUNT   = new BytesRef("point count ");
+  final static BytesRef DOC_COUNT     = new BytesRef("doc count ");
 
   private IndexOutput dataOut;
   final BytesRefBuilder scratch = new BytesRefBuilder();
@@ -68,12 +69,13 @@ class SimpleTextPointWriter extends PointWriter {
   public void writeField(FieldInfo fieldInfo, PointReader values) throws IOException {
 
     // We use the normal BKDWriter, but subclass to customize how it writes the index and blocks to disk:
-    try (BKDWriter writer = new BKDWriter(writeState.directory,
-                                     writeState.segmentInfo.name,
-                                     fieldInfo.getPointDimensionCount(),
-                                     fieldInfo.getPointNumBytes(),
-                                     BKDWriter.DEFAULT_MAX_POINTS_IN_LEAF_NODE,
-                                     BKDWriter.DEFAULT_MAX_MB_SORT_IN_HEAP) {
+    try (BKDWriter writer = new BKDWriter(writeState.segmentInfo.maxDoc(),
+                                          writeState.directory,
+                                          writeState.segmentInfo.name,
+                                          fieldInfo.getPointDimensionCount(),
+                                          fieldInfo.getPointNumBytes(),
+                                          BKDWriter.DEFAULT_MAX_POINTS_IN_LEAF_NODE,
+                                          BKDWriter.DEFAULT_MAX_MB_SORT_IN_HEAP) {
 
         @Override
         protected void writeIndex(IndexOutput out, long[] leafBlockFPs, byte[] splitPackedValues) throws IOException {
@@ -107,6 +109,10 @@ class SimpleTextPointWriter extends PointWriter {
           writeLong(out, pointCount);
           newline(out);
 
+          write(out, DOC_COUNT);
+          writeInt(out, docsSeen.cardinality());
+          newline(out);
+
           for(int i=0;i<leafBlockFPs.length;i++) {
             write(out, BLOCK_FP);
             writeLong(out, leafBlockFPs[i]);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/lucene/core/src/java/org/apache/lucene/codecs/PointFormat.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/PointFormat.java b/lucene/core/src/java/org/apache/lucene/codecs/PointFormat.java
index fc015d5..964f8f0 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/PointFormat.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/PointFormat.java
@@ -100,6 +100,11 @@ public abstract class PointFormat {
           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");
+          }
         };
       }
     };

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/lucene/core/src/java/org/apache/lucene/codecs/PointWriter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/PointWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/PointWriter.java
index 2224c52..d244093 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/PointWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/PointWriter.java
@@ -121,6 +121,10 @@ public abstract class PointWriter implements Closeable {
                    throw new UnsupportedOperationException();
                  }
 
+                 @Override
+                 public int getDocCount(String fieldName) {
+                   throw new UnsupportedOperationException();
+                 }
                });
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointReader.java
index e493030..91a1e6c 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointReader.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointReader.java
@@ -226,5 +226,16 @@ public class Lucene60PointReader extends PointReader implements Closeable {
     }
     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/b5475d10/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointWriter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointWriter.java
index 9709ffb..63fc134 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointWriter.java
@@ -82,7 +82,8 @@ public class Lucene60PointWriter extends PointWriter implements Closeable {
   @Override
   public void writeField(FieldInfo fieldInfo, PointReader values) throws IOException {
 
-    try (BKDWriter writer = new BKDWriter(writeState.directory,
+    try (BKDWriter writer = new BKDWriter(writeState.segmentInfo.maxDoc(),
+                                          writeState.directory,
                                           writeState.segmentInfo.name,
                                           fieldInfo.getPointDimensionCount(),
                                           fieldInfo.getPointNumBytes(),
@@ -129,7 +130,8 @@ public class Lucene60PointWriter extends PointWriter implements Closeable {
           // Optimize the 1D case to use BKDWriter.merge, which does a single merge sort of the
           // already sorted incoming segments, instead of trying to sort all points again as if
           // we were simply reindexing them:
-          try (BKDWriter writer = new BKDWriter(writeState.directory,
+          try (BKDWriter writer = new BKDWriter(writeState.segmentInfo.maxDoc(),
+                                                writeState.directory,
                                                 writeState.segmentInfo.name,
                                                 fieldInfo.getPointDimensionCount(),
                                                 fieldInfo.getPointNumBytes(),

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/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 db32924..012f88a 100644
--- a/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
+++ b/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
@@ -1695,6 +1695,7 @@ public final class CheckIndex implements Closeable {
         }
         for (FieldInfo fieldInfo : fieldInfos) {
           if (fieldInfo.getPointDimensionCount() > 0) {
+            FixedBitSet docsSeen = new FixedBitSet(reader.maxDoc());
             status.totalValueFields++;
             int dimCount = fieldInfo.getPointDimensionCount();
             int bytesPerDim = fieldInfo.getPointNumBytes();
@@ -1709,6 +1710,12 @@ public final class CheckIndex implements Closeable {
 
             byte[] globalMinPackedValue = values.getMinPackedValue(fieldInfo.name);
             long size = values.size(fieldInfo.name);
+            int docCount = values.getDocCount(fieldInfo.name);
+
+            if (docCount > size) {
+              throw new RuntimeException("point values for field \"" + fieldInfo.name + "\" claims to have size=" + size + " points and inconsistent docCount=" + docCount);
+            }
+
             if (globalMinPackedValue == null) {
               if (size != 0) {
                 throw new RuntimeException("getMinPackedValue is null points for field \"" + fieldInfo.name + "\" yet size=" + size);
@@ -1739,6 +1746,7 @@ public final class CheckIndex implements Closeable {
                                public void visit(int docID, byte[] packedValue) {
                                  checkPackedValue("packed value", packedValue, docID);
                                  pointCountSeen[0]++;
+                                 docsSeen.set(docID);
 
                                  for(int dim=0;dim<dimCount;dim++) {
                                    int offset = bytesPerDim * dim;
@@ -1821,9 +1829,12 @@ public final class CheckIndex implements Closeable {
                              });
 
             if (pointCountSeen[0] != size) {
-              System.out.println("HERE: " + values);
               throw new RuntimeException("point values for field \"" + fieldInfo.name + "\" claims to have size=" + size + " points, but in fact has " + pointCountSeen[0]);
             }
+
+            if (docsSeen.cardinality() != docCount) {
+              throw new RuntimeException("point values for field \"" + fieldInfo.name + "\" claims to have docCount=" + docCount + " but in fact has " + docsSeen.cardinality());
+            }
           }
         }
       }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/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 c1d8ab7..532265f 100644
--- a/lucene/core/src/java/org/apache/lucene/index/ParallelLeafReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/ParallelLeafReader.java
@@ -394,6 +394,19 @@ public class ParallelLeafReader extends LeafReader {
         }
         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);
+      }
     };
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/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 be049dd..230a14f 100644
--- a/lucene/core/src/java/org/apache/lucene/index/PointValues.java
+++ b/lucene/core/src/java/org/apache/lucene/index/PointValues.java
@@ -95,5 +95,6 @@ public abstract class PointValues {
   /** Returns the total number of indexed points across all documents in this field. */
   public abstract long size(String fieldName);
 
-  // nocommit make "delete all point docs then force merge" and then check stats test
+  /** Returns the total number of documents that have indexed at least one point for this field. */
+  public abstract int getDocCount(String fieldName);
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/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 fe3aa14..546bf71 100644
--- a/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java
@@ -113,6 +113,11 @@ class PointValuesWriter {
                         public long size(String fieldName) {
                           throw new UnsupportedOperationException();
                         }
+
+                        @Override
+                        public int getDocCount(String fieldName) {
+                          throw new UnsupportedOperationException();
+                        }
                       });
   }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/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 50f5ad7..a741111 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java
@@ -177,6 +177,11 @@ public final class SlowCodecReaderWrapper {
       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/b5475d10/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 424b81c..b904a50 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
@@ -43,6 +43,7 @@ public class BKDReader implements Accountable {
   final byte[] minPackedValue;
   final byte[] maxPackedValue;
   final long pointCount;
+  final int docCount;
   protected final int packedBytesLength;
 
   /** Caller must pre-seek the provided {@link IndexInput} to the index location that {@link BKDWriter#finish} returned */
@@ -65,6 +66,7 @@ public class BKDReader implements Accountable {
     in.readBytes(maxPackedValue, 0, packedBytesLength);
 
     pointCount = in.readVLong();
+    docCount = in.readVInt();
 
     splitPackedValues = new byte[(1+bytesPerDim)*numLeaves];
 
@@ -126,7 +128,7 @@ public class BKDReader implements Accountable {
 
   /** Called by consumers that have their own on-disk format for the index (e.g. SimpleText) */
   protected BKDReader(IndexInput in, int numDims, int maxPointsInLeafNode, int bytesPerDim, long[] leafBlockFPs, byte[] splitPackedValues,
-                      byte[] minPackedValue, byte[] maxPackedValue, long pointCount) throws IOException {
+                      byte[] minPackedValue, byte[] maxPackedValue, long pointCount, int docCount) throws IOException {
     this.in = in;
     this.numDims = numDims;
     this.maxPointsInLeafNode = maxPointsInLeafNode;
@@ -138,6 +140,7 @@ public class BKDReader implements Accountable {
     this.minPackedValue = minPackedValue;
     this.maxPackedValue = maxPackedValue;
     this.pointCount = pointCount;
+    this.docCount = docCount;
     assert minPackedValue.length == packedBytesLength;
     assert maxPackedValue.length == packedBytesLength;
   }
@@ -436,4 +439,8 @@ public class BKDReader implements Accountable {
   public long getPointCount() {
     return pointCount;
   }
+
+  public int getDocCount() {
+    return docCount;
+  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/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 0ccdf43..5388bb3 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
@@ -34,6 +34,7 @@ import org.apache.lucene.store.TrackingDirectoryWrapper;
 import org.apache.lucene.util.ArrayUtil;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.BytesRefBuilder;
+import org.apache.lucene.util.FixedBitSet;
 import org.apache.lucene.util.IOUtils;
 import org.apache.lucene.util.IntroSorter;
 import org.apache.lucene.util.LongBitSet;
@@ -110,6 +111,8 @@ public class BKDWriter implements Closeable {
   final byte[] scratch2;
   final int[] commonPrefixLengths;
 
+  protected final FixedBitSet docsSeen;
+
   private OfflinePointWriter offlinePointWriter;
   private HeapPointWriter heapPointWriter;
 
@@ -125,11 +128,11 @@ public class BKDWriter implements Closeable {
 
   protected long pointCount;
 
-  public BKDWriter(Directory tempDir, String tempFileNamePrefix, int numDims, int bytesPerDim) throws IOException {
-    this(tempDir, tempFileNamePrefix, numDims, bytesPerDim, DEFAULT_MAX_POINTS_IN_LEAF_NODE, DEFAULT_MAX_MB_SORT_IN_HEAP);
+  public BKDWriter(int maxDoc, Directory tempDir, String tempFileNamePrefix, int numDims, int bytesPerDim) throws IOException {
+    this(maxDoc, tempDir, tempFileNamePrefix, numDims, bytesPerDim, DEFAULT_MAX_POINTS_IN_LEAF_NODE, DEFAULT_MAX_MB_SORT_IN_HEAP);
   }
 
-  public BKDWriter(Directory tempDir, String tempFileNamePrefix, int numDims, int bytesPerDim, int maxPointsInLeafNode, double maxMBSortInHeap) throws IOException {
+  public BKDWriter(int maxDoc, Directory tempDir, String tempFileNamePrefix, int numDims, int bytesPerDim, int maxPointsInLeafNode, double maxMBSortInHeap) throws IOException {
     verifyParams(numDims, maxPointsInLeafNode, maxMBSortInHeap);
     // We use tracking dir to deal with removing files on exception, so each place that
     // creates temp files doesn't need crazy try/finally/sucess logic:
@@ -138,6 +141,7 @@ public class BKDWriter implements Closeable {
     this.maxPointsInLeafNode = maxPointsInLeafNode;
     this.numDims = numDims;
     this.bytesPerDim = bytesPerDim;
+    docsSeen = new FixedBitSet(maxDoc);
     packedBytesLength = numDims * bytesPerDim;
 
     scratchDiff = new byte[bytesPerDim];
@@ -239,6 +243,7 @@ public class BKDWriter implements Closeable {
     }
 
     pointCount++;
+    docsSeen.set(docID);
   }
 
   /** How many points have been added so far */
@@ -420,8 +425,10 @@ public class BKDWriter implements Closeable {
       // System.out.println("iter reader=" + reader);
 
       // NOTE: doesn't work with subclasses (e.g. SimpleText!)
-      leafBlockDocIDs[leafCount] = reader.docIDBase + reader.docID;
+      int docID = reader.docIDBase + reader.docID;
+      leafBlockDocIDs[leafCount] = docID;
       System.arraycopy(reader.state.scratchPackedValue, 0, leafBlockPackedValues[leafCount], 0, packedBytesLength);
+      docsSeen.set(docID);
 
       if (valueCount == 0) {
         System.arraycopy(reader.state.scratchPackedValue, 0, minPackedValue, 0, packedBytesLength);
@@ -862,6 +869,7 @@ public class BKDWriter implements Closeable {
     out.writeBytes(maxPackedValue, 0, packedBytesLength);
 
     out.writeVLong(pointCount);
+    out.writeVInt(docsSeen.cardinality());
 
     // TODO: for 1D case, don't waste the first byte of each split value (it's always 0)
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/lucene/core/src/test/org/apache/lucene/util/bkd/TestBKD.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/util/bkd/TestBKD.java b/lucene/core/src/test/org/apache/lucene/util/bkd/TestBKD.java
index 1688e6f..a98aa2e 100644
--- a/lucene/core/src/test/org/apache/lucene/util/bkd/TestBKD.java
+++ b/lucene/core/src/test/org/apache/lucene/util/bkd/TestBKD.java
@@ -42,7 +42,7 @@ public class TestBKD extends LuceneTestCase {
 
   public void testBasicInts1D() throws Exception {
     try (Directory dir = getDirectory(100)) {
-      BKDWriter w = new BKDWriter(dir, "tmp", 1, 4, 2, 1.0f);
+      BKDWriter w = new BKDWriter(100, dir, "tmp", 1, 4, 2, 1.0f);
       byte[] scratch = new byte[4];
       for(int docID=0;docID<100;docID++) {
         NumericUtils.intToBytes(docID, scratch, 0);
@@ -117,7 +117,7 @@ public class TestBKD extends LuceneTestCase {
       int numDims = TestUtil.nextInt(random(), 1, 5);
       int maxPointsInLeafNode = TestUtil.nextInt(random(), 50, 100);
       float maxMB = (float) 3.0 + (3*random().nextFloat());
-      BKDWriter w = new BKDWriter(dir, "tmp", numDims, 4, maxPointsInLeafNode, maxMB);
+      BKDWriter w = new BKDWriter(numDocs, dir, "tmp", numDims, 4, maxPointsInLeafNode, maxMB);
 
       if (VERBOSE) {
         System.out.println("TEST: numDims=" + numDims + " numDocs=" + numDocs);
@@ -258,7 +258,7 @@ public class TestBKD extends LuceneTestCase {
       int numDims = TestUtil.nextInt(random(), 1, 5);
       int maxPointsInLeafNode = TestUtil.nextInt(random(), 50, 100);
       float maxMB = (float) 3.0 + (3*random().nextFloat());
-      BKDWriter w = new BKDWriter(dir, "tmp", numDims, numBytesPerDim, maxPointsInLeafNode, maxMB);
+      BKDWriter w = new BKDWriter(numDocs, dir, "tmp", numDims, numBytesPerDim, maxPointsInLeafNode, maxMB);
       BigInteger[][] docs = new BigInteger[numDocs][];
 
       byte[] scratch = new byte[numBytesPerDim*numDims];
@@ -431,7 +431,7 @@ public class TestBKD extends LuceneTestCase {
   public void testTooLittleHeap() throws Exception { 
     try (Directory dir = getDirectory(0)) {
       IllegalArgumentException expected = expectThrows(IllegalArgumentException.class, () -> {
-        new BKDWriter(dir, "bkd", 1, 16, 1000000, 0.001);
+        new BKDWriter(1, dir, "bkd", 1, 16, 1000000, 0.001);
       });
       assertTrue(expected.getMessage().contains("either increase maxMBSortInHeap or decrease maxPointsInLeafNode"));
     }
@@ -631,7 +631,7 @@ public class TestBKD extends LuceneTestCase {
     List<Integer> docIDBases = null;
     int seg = 0;
 
-    BKDWriter w = new BKDWriter(dir, "_" + seg, numDims, numBytesPerDim, maxPointsInLeafNode, maxMB);
+    BKDWriter w = new BKDWriter(numValues, dir, "_" + seg, numDims, numBytesPerDim, maxPointsInLeafNode, maxMB);
     IndexOutput out = dir.createOutput("bkd", IOContext.DEFAULT);
     IndexInput in = null;
 
@@ -685,7 +685,7 @@ public class TestBKD extends LuceneTestCase {
           seg++;
           maxPointsInLeafNode = TestUtil.nextInt(random(), 50, 1000);
           maxMB = (float) 3.0 + (3*random().nextDouble());
-          w = new BKDWriter(dir, "_" + seg, numDims, numBytesPerDim, maxPointsInLeafNode, maxMB);
+          w = new BKDWriter(numValues, dir, "_" + seg, numDims, numBytesPerDim, maxPointsInLeafNode, maxMB);
           lastDocIDBase = docID;
         }
       }
@@ -701,7 +701,7 @@ public class TestBKD extends LuceneTestCase {
         out.close();
         in = dir.openInput("bkd", IOContext.DEFAULT);
         seg++;
-        w = new BKDWriter(dir, "_" + seg, numDims, numBytesPerDim, maxPointsInLeafNode, maxMB);
+        w = new BKDWriter(numValues, dir, "_" + seg, numDims, numBytesPerDim, maxPointsInLeafNode, maxMB);
         List<BKDReader> readers = new ArrayList<>();
         for(long fp : toMerge) {
           in.seek(fp);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java b/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java
index 71790fc..892eeef 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java
@@ -221,6 +221,12 @@ public final class AssertingPointFormat extends PointFormat {
       // TODO: what to assert?
       return in.size(fieldName);
     }
+
+    @Override
+    public int getDocCount(String fieldName) {
+      // TODO: what to assert?
+      return in.getDocCount(fieldName);
+    }
   }
 
   static class AssertingPointWriter extends PointWriter {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b5475d10/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPointFormat.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPointFormat.java b/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPointFormat.java
index 699fb3c..b663a80 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPointFormat.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPointFormat.java
@@ -176,5 +176,10 @@ class CrankyPointFormat extends PointFormat {
     public long size(String fieldName) {
       return delegate.size(fieldName);
     }
+
+    @Override
+    public int getDocCount(String fieldName) {
+      return delegate.getDocCount(fieldName);
+    }
   }
 }


[2/9] lucene-solr git commit: fix NPE, add test case

Posted by mi...@apache.org.
fix NPE, add test case


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/85dbdb76
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/85dbdb76
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/85dbdb76

Branch: refs/heads/master
Commit: 85dbdb7659498e8a41653b642dc0c9b0e1f69304
Parents: 3c02ab2
Author: Mike McCandless <mi...@apache.org>
Authored: Wed Mar 2 17:59:42 2016 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Wed Mar 2 17:59:42 2016 -0500

----------------------------------------------------------------------
 .../org/apache/lucene/index/CheckIndex.java     | 18 +++++++++-------
 .../apache/lucene/index/TestPointValues.java    | 22 ++++++++++++++++++++
 2 files changed, 32 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/85dbdb76/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 c25531c..db32924 100644
--- a/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
+++ b/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
@@ -1709,17 +1709,19 @@ public final class CheckIndex implements Closeable {
 
             byte[] globalMinPackedValue = values.getMinPackedValue(fieldInfo.name);
             long size = values.size(fieldInfo.name);
-            if (globalMinPackedValue == null && size != 0) {
-              throw new RuntimeException("getMinPackedValue is null points for field \"" + fieldInfo.name + "\" yet size=" + size);
-            }
-            if (globalMinPackedValue.length != packedBytesCount) {
+            if (globalMinPackedValue == null) {
+              if (size != 0) {
+                throw new RuntimeException("getMinPackedValue is null points for field \"" + fieldInfo.name + "\" yet size=" + size);
+              }
+            } 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);
-            if (globalMaxPackedValue == null && size != 0) {
-              throw new RuntimeException("getMaxPackedValue is null points for field \"" + fieldInfo.name + "\" yet size=" + size);
-            }
-            if (globalMaxPackedValue.length != packedBytesCount) {
+            if (globalMaxPackedValue == null) {
+              if (size != 0) {
+                throw new RuntimeException("getMaxPackedValue is null points for field \"" + fieldInfo.name + "\" yet size=" + size);
+              }
+            } else if (globalMaxPackedValue.length != packedBytesCount) {
               throw new RuntimeException("getMaxPackedValue for field \"" + fieldInfo.name + "\" return length=" + globalMaxPackedValue.length + " array, but should be " + packedBytesCount);
             }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/85dbdb76/lucene/core/src/test/org/apache/lucene/index/TestPointValues.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestPointValues.java b/lucene/core/src/test/org/apache/lucene/index/TestPointValues.java
index 7551d3c..506d58c 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestPointValues.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestPointValues.java
@@ -34,6 +34,7 @@ import org.apache.lucene.document.Field;
 import org.apache.lucene.document.FloatPoint;
 import org.apache.lucene.document.IntPoint;
 import org.apache.lucene.document.LongPoint;
+import org.apache.lucene.document.StringField;
 import org.apache.lucene.index.PointValues.IntersectVisitor;
 import org.apache.lucene.index.PointValues.Relation;
 import org.apache.lucene.index.PointValues;
@@ -540,4 +541,25 @@ public class TestPointValues extends LuceneTestCase {
     w.close();
     dir.close();
   }
+
+  public void testDeleteAllPointDocs() throws Exception {
+    Directory dir = newDirectory();
+    IndexWriterConfig iwc = newIndexWriterConfig();
+    IndexWriter w = new IndexWriter(dir, iwc);
+    Document doc = new Document();
+    doc.add(new StringField("id", "0", Field.Store.NO));
+    doc.add(new IntPoint("int", 17));
+    w.addDocument(doc);
+    w.addDocument(new Document());
+    w.commit();
+
+    w.deleteDocuments(new Term("id", "0"));
+    
+    w.forceMerge(1);
+    DirectoryReader r = w.getReader();
+    assertEquals(0, r.leaves().get(0).reader().getPointValues().size("int"));
+    w.close();
+    r.close();
+    dir.close();
+  }
 }


[8/9] lucene-solr git commit: also assert points stats docCount <= maxDoc, and docCount >=0 and size >= 0

Posted by mi...@apache.org.
also assert points stats docCount <= maxDoc, and docCount >=0 and size >= 0


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/2d5519a0
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/2d5519a0
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/2d5519a0

Branch: refs/heads/master
Commit: 2d5519a0ee7415a62356c3bc93fd80206811a8ac
Parents: c16f73a
Author: Mike McCandless <mi...@apache.org>
Authored: Thu Mar 3 05:48:15 2016 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Thu Mar 3 05:48:15 2016 -0500

----------------------------------------------------------------------
 .../org/apache/lucene/index/CheckIndex.java     |  4 ++++
 .../codecs/asserting/AssertingPointFormat.java  | 23 +++++++++++++++-----
 2 files changed, 22 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2d5519a0/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 012f88a..1da69c1 100644
--- a/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
+++ b/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
@@ -1716,6 +1716,10 @@ public final class CheckIndex implements Closeable {
               throw new RuntimeException("point values for field \"" + fieldInfo.name + "\" claims to have size=" + size + " points and inconsistent docCount=" + docCount);
             }
 
+            if (docCount > reader.maxDoc()) {
+              throw new RuntimeException("point values for field \"" + fieldInfo.name + "\" claims to have docCount=" + docCount + " but that's greater than maxDoc=" + reader.maxDoc());
+            }
+
             if (globalMinPackedValue == null) {
               if (size != 0) {
                 throw new RuntimeException("getMinPackedValue is null points for field \"" + fieldInfo.name + "\" yet size=" + size);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2d5519a0/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java b/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java
index 892eeef..07365e0 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPointFormat.java
@@ -64,7 +64,7 @@ public final class AssertingPointFormat extends PointFormat {
 
   @Override
   public PointReader fieldsReader(SegmentReadState state) throws IOException {
-    return new AssertingPointReader(in.fieldsReader(state));
+    return new AssertingPointReader(state.segmentInfo.maxDoc(), in.fieldsReader(state));
   }
 
   /** Validates in the 1D case that all points are visited in order, and point values are in bounds of the last cell checked */
@@ -146,9 +146,11 @@ public final class AssertingPointFormat extends PointFormat {
   
   static class AssertingPointReader extends PointReader {
     private final PointReader in;
+    private final int maxDoc;
     
-    AssertingPointReader(PointReader in) {
+    AssertingPointReader(int maxDoc, PointReader in) {
       this.in = in;
+      this.maxDoc = maxDoc;
       // do a few simple checks on init
       assert toString() != null;
       assert ramBytesUsed() >= 0;
@@ -188,7 +190,7 @@ public final class AssertingPointFormat extends PointFormat {
     
     @Override
     public PointReader getMergeInstance() throws IOException {
-      return new AssertingPointReader(in.getMergeInstance());
+      return new AssertingPointReader(maxDoc, in.getMergeInstance());
     }
 
     @Override
@@ -198,35 +200,46 @@ public final class AssertingPointFormat extends PointFormat {
 
     @Override
     public byte[] getMinPackedValue(String fieldName) throws IOException {
+      assertStats(fieldName);
       return in.getMinPackedValue(fieldName);
     }
 
     @Override
     public byte[] getMaxPackedValue(String fieldName) throws IOException {
+      assertStats(fieldName);
       return in.getMaxPackedValue(fieldName);
     }
 
     @Override
     public int getNumDimensions(String fieldName) throws IOException {
+      assertStats(fieldName);
       return in.getNumDimensions(fieldName);
     }
 
     @Override
     public int getBytesPerDimension(String fieldName) throws IOException {
+      assertStats(fieldName);
       return in.getBytesPerDimension(fieldName);
     }
 
     @Override
     public long size(String fieldName) {
-      // TODO: what to assert?
+      assertStats(fieldName);
       return in.size(fieldName);
     }
 
     @Override
     public int getDocCount(String fieldName) {
-      // TODO: what to assert?
+      assertStats(fieldName);
       return in.getDocCount(fieldName);
     }
+
+    private void assertStats(String fieldName) {
+      assert in.size(fieldName) >= 0;
+      assert in.getDocCount(fieldName) >= 0;
+      assert in.getDocCount(fieldName) <= in.size(fieldName);
+      assert in.getDocCount(fieldName) <= maxDoc;
+    }
   }
 
   static class AssertingPointWriter extends PointWriter {


[7/9] lucene-solr git commit: remove leftover print

Posted by mi...@apache.org.
remove leftover print


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/c16f73aa
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/c16f73aa
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/c16f73aa

Branch: refs/heads/master
Commit: c16f73aa919c5e45cae8e3d125bcbf82f118f62d
Parents: 7dffaa3
Author: Mike McCandless <mi...@apache.org>
Authored: Wed Mar 2 19:29:08 2016 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Wed Mar 2 19:29:08 2016 -0500

----------------------------------------------------------------------
 lucene/core/src/test/org/apache/lucene/util/bkd/TestBKD.java | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c16f73aa/lucene/core/src/test/org/apache/lucene/util/bkd/TestBKD.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/util/bkd/TestBKD.java b/lucene/core/src/test/org/apache/lucene/util/bkd/TestBKD.java
index a98aa2e..2be2b42 100644
--- a/lucene/core/src/test/org/apache/lucene/util/bkd/TestBKD.java
+++ b/lucene/core/src/test/org/apache/lucene/util/bkd/TestBKD.java
@@ -693,7 +693,6 @@ public class TestBKD extends LuceneTestCase {
       long indexFP;
 
       if (toMerge != null) {
-        System.out.println("merge " + toMerge.size());
         if (segCount > 0) {
           docIDBases.add(lastDocIDBase);
           toMerge.add(w.finish(out));


[9/9] lucene-solr git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/lucene-solr

Posted by mi...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/lucene-solr


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/4c431388
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/4c431388
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/4c431388

Branch: refs/heads/master
Commit: 4c4313889f4ee9c12ff0ce012f24de4a447c319b
Parents: 2d5519a a212073
Author: Mike McCandless <mi...@apache.org>
Authored: Thu Mar 3 05:48:45 2016 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Thu Mar 3 05:48:45 2016 -0500

----------------------------------------------------------------------
 lucene/CHANGES.txt                              |   6 +
 lucene/benchmark/conf/spatial.alg               |   2 +-
 lucene/benchmark/ivy.xml                        |   2 +-
 .../benchmark/byTask/feeds/SpatialDocMaker.java |   8 +-
 .../byTask/feeds/SpatialFileQueryMaker.java     |   4 +-
 .../java/org/apache/lucene/util/Version.java    |   7 +
 lucene/ivy-versions.properties                  |   3 +-
 lucene/licenses/spatial4j-0.5-tests.jar.sha1    |   1 -
 lucene/licenses/spatial4j-0.5.jar.sha1          |   1 -
 lucene/licenses/spatial4j-0.6-tests.jar.sha1    |   1 +
 lucene/licenses/spatial4j-0.6.jar.sha1          |   1 +
 lucene/licenses/spatial4j-NOTICE.txt            | 136 ++++++++++++++++++-
 lucene/spatial-extras/ivy.xml                   |   4 +-
 .../apache/lucene/spatial/SpatialStrategy.java  |  12 +-
 .../bbox/BBoxOverlapRatioValueSource.java       |   2 +-
 .../spatial/bbox/BBoxSimilarityValueSource.java |   4 +-
 .../lucene/spatial/bbox/BBoxStrategy.java       |  10 +-
 .../lucene/spatial/bbox/BBoxValueSource.java    |   2 +-
 .../composite/CompositeSpatialStrategy.java     |   4 +-
 .../composite/IntersectsRPTVerifyQuery.java     |   4 +-
 .../spatial/prefix/AbstractPrefixTreeQuery.java |   2 +-
 .../prefix/AbstractVisitingPrefixTreeQuery.java |   4 +-
 .../spatial/prefix/ContainsPrefixTreeQuery.java |   4 +-
 .../spatial/prefix/HeatmapFacetCounter.java     |  10 +-
 .../prefix/IntersectsPrefixTreeQuery.java       |   4 +-
 .../prefix/NumberRangePrefixTreeStrategy.java   |   4 +-
 .../PointPrefixTreeFieldCacheProvider.java      |   2 +-
 .../spatial/prefix/PrefixTreeFacetCounter.java  |   6 +-
 .../spatial/prefix/PrefixTreeStrategy.java      |  10 +-
 .../prefix/RecursivePrefixTreeStrategy.java     |   4 +-
 .../prefix/TermQueryPrefixTreeStrategy.java     |   6 +-
 .../spatial/prefix/WithinPrefixTreeQuery.java   |  16 +--
 .../apache/lucene/spatial/prefix/tree/Cell.java |   6 +-
 .../prefix/tree/DateRangePrefixTree.java        |   2 +-
 .../spatial/prefix/tree/FilterCellIterator.java |   4 +-
 .../spatial/prefix/tree/GeohashPrefixTree.java  |  10 +-
 .../lucene/spatial/prefix/tree/LegacyCell.java  |   6 +-
 .../spatial/prefix/tree/LegacyPrefixTree.java   |   8 +-
 .../prefix/tree/NumberRangePrefixTree.java      |  16 +--
 .../prefix/tree/PackedQuadPrefixTree.java       |  12 +-
 .../spatial/prefix/tree/QuadPrefixTree.java     |  10 +-
 .../spatial/prefix/tree/SpatialPrefixTree.java  |   4 +-
 .../prefix/tree/SpatialPrefixTreeFactory.java   |   4 +-
 .../spatial/prefix/tree/TreeCellIterator.java   |   4 +-
 .../lucene/spatial/query/SpatialArgs.java       |  12 +-
 .../lucene/spatial/query/SpatialArgsParser.java |  10 +-
 .../lucene/spatial/query/SpatialOperation.java  |   8 +-
 .../serialized/SerializedDVStrategy.java        |  10 +-
 .../lucene/spatial/spatial4j/Geo3dShape.java    |  14 +-
 .../util/DistanceToShapeValueSource.java        |  10 +-
 .../spatial/util/ShapeAreaValueSource.java      |   6 +-
 .../lucene/spatial/util/ShapeFieldCache.java    |   2 +-
 .../ShapeFieldCacheDistanceValueSource.java     |   6 +-
 .../spatial/util/ShapeFieldCacheProvider.java   |   2 +-
 .../spatial/util/ShapePredicateValueSource.java |   2 +-
 .../spatial/vector/DistanceValueSource.java     |   4 +-
 .../spatial/vector/PointVectorStrategy.java     |  16 +--
 .../lucene/spatial/DistanceStrategyTest.java    |   6 +-
 .../apache/lucene/spatial/PortedSolr3Test.java  |   8 +-
 .../lucene/spatial/QueryEqualsHashCodeTest.java |   4 +-
 .../apache/lucene/spatial/SpatialArgsTest.java  |   4 +-
 .../apache/lucene/spatial/SpatialExample.java   |   8 +-
 .../apache/lucene/spatial/SpatialTestCase.java  |   8 +-
 .../apache/lucene/spatial/SpatialTestData.java  |   4 +-
 .../apache/lucene/spatial/SpatialTestQuery.java |   2 +-
 .../apache/lucene/spatial/StrategyTestCase.java |   4 +-
 .../lucene/spatial/TestTestFramework.java       |   4 +-
 .../lucene/spatial/bbox/TestBBoxStrategy.java   |  12 +-
 .../composite/CompositeStrategyTest.java        |  12 +-
 .../spatial/prefix/DateNRStrategyTest.java      |   2 +-
 .../spatial/prefix/HeatmapFacetCounterTest.java |  18 +--
 .../lucene/spatial/prefix/JtsPolygonTest.java   |   8 +-
 .../spatial/prefix/NumberRangeFacetsTest.java   |   2 +-
 .../RandomSpatialOpFuzzyPrefixTreeTest.java     |  24 ++--
 .../prefix/RandomSpatialOpStrategyTestCase.java |   2 +-
 .../prefix/TestRecursivePrefixTreeStrategy.java |   8 +-
 .../prefix/TestTermQueryPrefixGridStrategy.java |   4 +-
 .../prefix/tree/DateRangePrefixTreeTest.java    |   4 +-
 .../prefix/tree/SpatialPrefixTreeTest.java      |   8 +-
 .../spatial/query/SpatialArgsParserTest.java    |   4 +-
 .../serialized/SerializedStrategyTest.java      |   2 +-
 .../lucene/spatial/spatial4j/Geo3dRptTest.java  |  10 +-
 .../Geo3dShapeRectRelationTestCase.java         |  18 +--
 .../Geo3dShapeSphereModelRectRelationTest.java  |   2 +-
 .../spatial4j/RandomizedShapeTestCase.java      |  22 +--
 .../spatial/spatial4j/geo3d/GeoPointTest.java   |   2 +-
 .../spatial/vector/TestPointVectorStrategy.java |   6 +-
 solr/CHANGES.txt                                |   3 +
 solr/core/ivy.xml                               |   2 +-
 .../handler/component/SpatialHeatmapFacets.java |   4 +-
 .../solr/schema/AbstractSpatialFieldType.java   |  12 +-
 .../AbstractSpatialPrefixTreeFieldType.java     |   2 +-
 .../java/org/apache/solr/schema/BBoxField.java  |   2 +-
 .../org/apache/solr/schema/DateRangeField.java  |   2 +-
 .../org/apache/solr/schema/GeoHashField.java    |   8 +-
 .../java/org/apache/solr/schema/LatLonType.java |   8 +-
 .../java/org/apache/solr/schema/PointType.java  |   2 +-
 .../schema/RptWithGeometrySpatialField.java     |   6 +-
 .../apache/solr/search/ValueSourceParser.java   |   2 +-
 .../distance/GeoDistValueSourceParser.java      |   8 +-
 .../function/distance/GeohashFunction.java      |   2 +-
 .../distance/GeohashHaversineFunction.java      |  10 +-
 .../distance/HaversineConstFunction.java        |   4 +-
 .../function/distance/HaversineFunction.java    |   2 +-
 .../org/apache/solr/util/DistanceUnits.java     |   2 +-
 .../java/org/apache/solr/util/SpatialUtils.java |  18 +--
 .../solr/collection1/conf/schema_latest.xml     |   2 +-
 .../apache/solr/search/TestSolr4Spatial.java    |   8 +-
 .../function/distance/DistanceFunctionTest.java |   4 +-
 .../org/apache/solr/util/DistanceUnitsTest.java |   2 +-
 solr/licenses/spatial4j-0.5.jar.sha1            |   1 -
 solr/licenses/spatial4j-0.6.jar.sha1            |   1 +
 solr/licenses/spatial4j-NOTICE.txt              | 136 ++++++++++++++++++-
 113 files changed, 609 insertions(+), 340 deletions(-)
----------------------------------------------------------------------



[4/9] lucene-solr git commit: add missing delegations

Posted by mi...@apache.org.
add missing delegations


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/5b1b1838
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/5b1b1838
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/5b1b1838

Branch: refs/heads/master
Commit: 5b1b183878a576901b8c6d1b04819c08b2576ef0
Parents: b5475d1
Author: Mike McCandless <mi...@apache.org>
Authored: Wed Mar 2 18:45:03 2016 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Wed Mar 2 18:45:03 2016 -0500

----------------------------------------------------------------------
 .../java/org/apache/lucene/index/SortingLeafReader.java   | 10 ++++++++++
 1 file changed, 10 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5b1b1838/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java
----------------------------------------------------------------------
diff --git a/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java b/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java
index 12cee20..683c5c2 100644
--- a/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java
+++ b/lucene/misc/src/java/org/apache/lucene/index/SortingLeafReader.java
@@ -303,6 +303,16 @@ public class SortingLeafReader extends FilterLeafReader {
     public int getBytesPerDimension(String fieldName) throws IOException {
       return in.getBytesPerDimension(fieldName);
     }
+
+    @Override
+    public long size(String fieldName) {
+      return in.size(fieldName);
+    }
+
+    @Override
+    public int getDocCount(String fieldName) {
+      return in.getDocCount(fieldName);
+    }
   }
 
   private static class SortingSortedDocValues extends SortedDocValues {


[6/9] lucene-solr git commit: also test getDocCount on schema ghost

Posted by mi...@apache.org.
also test getDocCount on schema ghost


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/7dffaa30
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/7dffaa30
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/7dffaa30

Branch: refs/heads/master
Commit: 7dffaa30faa3995db120a31abf4828183d2b64b2
Parents: e4964ef
Author: Mike McCandless <mi...@apache.org>
Authored: Wed Mar 2 18:58:21 2016 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Wed Mar 2 18:58:21 2016 -0500

----------------------------------------------------------------------
 lucene/core/src/test/org/apache/lucene/index/TestPointValues.java | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/7dffaa30/lucene/core/src/test/org/apache/lucene/index/TestPointValues.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestPointValues.java b/lucene/core/src/test/org/apache/lucene/index/TestPointValues.java
index 506d58c..9aafb3f 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestPointValues.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestPointValues.java
@@ -558,6 +558,7 @@ public class TestPointValues extends LuceneTestCase {
     w.forceMerge(1);
     DirectoryReader r = w.getReader();
     assertEquals(0, r.leaves().get(0).reader().getPointValues().size("int"));
+    assertEquals(0, r.leaves().get(0).reader().getPointValues().getDocCount("int"));
     w.close();
     r.close();
     dir.close();


[5/9] lucene-solr git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/lucene-solr

Posted by mi...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/lucene-solr


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/e4964efd
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/e4964efd
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/e4964efd

Branch: refs/heads/master
Commit: e4964efdf400e777fac9f69595ef0dfbbc1e2945
Parents: 5b1b183 9f5bbc2
Author: Mike McCandless <mi...@apache.org>
Authored: Wed Mar 2 18:55:33 2016 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Wed Mar 2 18:55:33 2016 -0500

----------------------------------------------------------------------
 .../org/apache/lucene/document/BinaryPoint.java |  82 ++--
 .../org/apache/lucene/document/DoublePoint.java |  84 ++--
 .../org/apache/lucene/document/FloatPoint.java  |  84 ++--
 .../org/apache/lucene/document/IntPoint.java    |  84 ++--
 .../org/apache/lucene/document/LongPoint.java   |  84 ++--
 .../apache/lucene/search/PointInSetQuery.java   |  11 +-
 .../apache/lucene/search/PointRangeQuery.java   | 170 ++------
 .../index/TestDemoParallelLeafReader.java       |   2 +-
 .../apache/lucene/search/TestPointQueries.java  | 410 +++++++++----------
 .../TestUsageTrackingFilterCachingPolicy.java   |   2 +-
 .../demo/facet/DistanceFacetsExample.java       |   8 +-
 .../lucene/demo/facet/RangeFacetsExample.java   |   3 +-
 .../apache/lucene/facet/range/DoubleRange.java  |  33 +-
 .../facet/range/DoubleRangeFacetCounts.java     |   4 +-
 .../apache/lucene/facet/range/LongRange.java    |  25 +-
 .../lucene/facet/range/LongRangeCounter.java    |  14 +-
 .../facet/range/TestRangeFacetCounts.java       |  20 +-
 .../search/highlight/HighlighterTest.java       |   2 +-
 .../apache/lucene/document/BigIntegerPoint.java |  97 +++--
 .../lucene/document/InetAddressPoint.java       |  66 ++-
 .../org/apache/lucene/document/LatLonPoint.java |  11 +-
 .../lucene/document/TestBigIntegerPoint.java    |  12 +-
 .../lucene/document/TestInetAddressPoint.java   |   4 +-
 .../apache/lucene/document/TestLatLonPoint.java |   2 +-
 .../lucene/search/TestDocValuesRangeQuery.java  |  26 +-
 .../lucene/search/TestLatLonPointQueries.java   |   8 +-
 .../spatial/util/BaseGeoPointTestCase.java      |  74 +++-
 .../suggest/document/TestSuggestField.java      |   2 +-
 28 files changed, 636 insertions(+), 788 deletions(-)
----------------------------------------------------------------------