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/02/25 19:42:06 UTC
[13/18] lucene-solr git commit: improve tests; fix a couple nocommits
improve tests; fix a couple nocommits
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/c056f4b3
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/c056f4b3
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/c056f4b3
Branch: refs/heads/master
Commit: c056f4b3885ded22e4780ea9c61f95c52a3b654b
Parents: ae70920
Author: Mike McCandless <mi...@apache.org>
Authored: Wed Feb 24 16:59:01 2016 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Wed Feb 24 16:59:01 2016 -0500
----------------------------------------------------------------------
.../apache/lucene/search/PointInSetQuery.java | 14 +++--
.../apache/lucene/search/TestPointQueries.java | 60 +++++++++++++++++++-
2 files changed, 67 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c056f4b3/lucene/core/src/java/org/apache/lucene/search/PointInSetQuery.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/PointInSetQuery.java b/lucene/core/src/java/org/apache/lucene/search/PointInSetQuery.java
index 4da1c3e..c00973e 100644
--- a/lucene/core/src/java/org/apache/lucene/search/PointInSetQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/search/PointInSetQuery.java
@@ -42,7 +42,6 @@ import org.apache.lucene.util.StringHelper;
/** Finds all documents whose point value, previously indexed with e.g. {@link org.apache.lucene.document.LongPoint}, is contained in the
* specified set */
-// nocommit explain that the 1D case must be pre-sorted
public class PointInSetQuery extends Query {
// A little bit overkill for us, since all of our "terms" are always in the same field:
final PrefixCodedTerms sortedPackedPoints;
@@ -51,7 +50,7 @@ public class PointInSetQuery extends Query {
final int numDims;
final int bytesPerDim;
- /** {@code packedPoints} must already be sorted! */
+ /** In the 1D case, the {@code packedPoints} iterator must be in sorted order. */
protected PointInSetQuery(String field, int numDims, int bytesPerDim, BytesRefIterator packedPoints) throws IOException {
this.field = field;
if (bytesPerDim < 1 || bytesPerDim > PointValues.MAX_NUM_BYTES) {
@@ -61,6 +60,7 @@ public class PointInSetQuery extends Query {
if (numDims < 1 || numDims > PointValues.MAX_DIMENSIONS) {
throw new IllegalArgumentException("numDims must be > 0 and <= " + PointValues.MAX_DIMENSIONS + "; got " + numDims);
}
+
this.numDims = numDims;
// In the 1D case this works well (the more points, the more common prefixes they share, typically), but in
@@ -74,9 +74,13 @@ public class PointInSetQuery extends Query {
}
if (previous == null) {
previous = new BytesRefBuilder();
- // nocommit detect out-of-order 1D case
- } else if (previous.get().equals(current)) {
- continue; // deduplicate
+ } else {
+ int cmp = previous.get().compareTo(current);
+ if (cmp == 0) {
+ continue; // deduplicate
+ } else if (numDims == 1 && cmp > 0) {
+ throw new IllegalArgumentException("numDims=1 and values are out of order: saw " + previous + " before " + current);
+ }
}
builder.add(field, current);
previous.copyBytes(current);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c056f4b3/lucene/core/src/test/org/apache/lucene/search/TestPointQueries.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestPointQueries.java b/lucene/core/src/test/org/apache/lucene/search/TestPointQueries.java
index f9e6314..51d914d 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestPointQueries.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestPointQueries.java
@@ -96,6 +96,33 @@ public class TestPointQueries extends LuceneTestCase {
}
}
+ public void testBasicInts() throws Exception {
+ Directory dir = newDirectory();
+ IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(new MockAnalyzer(random())));
+
+ Document doc = new Document();
+ doc.add(new IntPoint("point", -7));
+ w.addDocument(doc);
+
+ doc = new Document();
+ doc.add(new IntPoint("point", 0));
+ w.addDocument(doc);
+
+ doc = new Document();
+ doc.add(new IntPoint("point", 3));
+ w.addDocument(doc);
+
+ DirectoryReader r = DirectoryReader.open(w);
+ IndexSearcher s = new IndexSearcher(r);
+ assertEquals(2, s.count(IntPoint.newRangeQuery("point", -8, false, 1, false)));
+ assertEquals(3, s.count(IntPoint.newRangeQuery("point", -7, true, 3, true)));
+ assertEquals(1, s.count(IntPoint.newExactQuery("point", -7)));
+ assertEquals(0, s.count(IntPoint.newExactQuery("point", -6)));
+ w.close();
+ r.close();
+ dir.close();
+ }
+
public void testBasicFloats() throws Exception {
Directory dir = newDirectory();
IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(new MockAnalyzer(random())));
@@ -123,6 +150,33 @@ public class TestPointQueries extends LuceneTestCase {
dir.close();
}
+ public void testBasicLongs() throws Exception {
+ Directory dir = newDirectory();
+ IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(new MockAnalyzer(random())));
+
+ Document doc = new Document();
+ doc.add(new LongPoint("point", -7));
+ w.addDocument(doc);
+
+ doc = new Document();
+ doc.add(new LongPoint("point", 0));
+ w.addDocument(doc);
+
+ doc = new Document();
+ doc.add(new LongPoint("point", 3));
+ w.addDocument(doc);
+
+ DirectoryReader r = DirectoryReader.open(w);
+ IndexSearcher s = new IndexSearcher(r);
+ assertEquals(2, s.count(LongPoint.newRangeQuery("point", -8L, false, 1L, false)));
+ assertEquals(3, s.count(LongPoint.newRangeQuery("point", -7L, true, 3L, true)));
+ assertEquals(1, s.count(LongPoint.newExactQuery("point", -7L)));
+ assertEquals(0, s.count(LongPoint.newExactQuery("point", -6L)));
+ w.close();
+ r.close();
+ dir.close();
+ }
+
public void testBasicDoubles() throws Exception {
Directory dir = newDirectory();
IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(new MockAnalyzer(random())));
@@ -1194,16 +1248,18 @@ public class TestPointQueries extends LuceneTestCase {
boolean useNarrowRange = random().nextBoolean();
final Integer valueMin;
final Integer valueMax;
+ int numValues;
if (useNarrowRange) {
int gap = random().nextInt(100);
valueMin = random().nextInt(Integer.MAX_VALUE-gap);
valueMax = valueMin + gap;
+ numValues = TestUtil.nextInt(random(), 1, gap+1);
} else {
valueMin = null;
valueMax = null;
+ numValues = TestUtil.nextInt(random(), 1, 100);
}
final Set<Integer> valuesSet = new HashSet<>();
- int numValues = TestUtil.nextInt(random(), 1, 100);
while (valuesSet.size() < numValues) {
valuesSet.add(randomIntValue(valueMin, valueMax));
}
@@ -1285,7 +1341,7 @@ public class TestPointQueries extends LuceneTestCase {
int numExtraValuesToQuery = random().nextInt(20);
while (valuesToQuery.size() < numValidValuesToQuery + numExtraValuesToQuery) {
- valuesToQuery.add(randomIntValue(valueMin, valueMax));
+ valuesToQuery.add(random().nextInt());
}
int expectedCount = 0;