You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2016/12/29 20:27:02 UTC
[2/2] lucene-solr:branch_6x: LUCENE-5325: Check for matching bits in
NumericDocValues to XValues converter
LUCENE-5325: Check for matching bits in NumericDocValues to XValues converter
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/4e5a6214
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/4e5a6214
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/4e5a6214
Branch: refs/heads/branch_6x
Commit: 4e5a62140f4e90fc41fe91350c7787c8455f2887
Parents: 80512ec
Author: Alan Woodward <ro...@apache.org>
Authored: Thu Dec 29 14:44:11 2016 +0000
Committer: Alan Woodward <ro...@apache.org>
Committed: Thu Dec 29 20:26:46 2016 +0000
----------------------------------------------------------------------
.../java/org/apache/lucene/search/DoubleValuesSource.java | 8 +++++---
.../src/java/org/apache/lucene/search/LongValuesSource.java | 8 +++++---
.../org/apache/lucene/search/TestDoubleValuesSource.java | 9 +++++++++
.../test/org/apache/lucene/search/TestLongValuesSource.java | 9 +++++++++
4 files changed, 28 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4e5a6214/lucene/core/src/java/org/apache/lucene/search/DoubleValuesSource.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/DoubleValuesSource.java b/lucene/core/src/java/org/apache/lucene/search/DoubleValuesSource.java
index 4361243..7cc1eac 100644
--- a/lucene/core/src/java/org/apache/lucene/search/DoubleValuesSource.java
+++ b/lucene/core/src/java/org/apache/lucene/search/DoubleValuesSource.java
@@ -25,6 +25,7 @@ import java.util.function.LongToDoubleFunction;
import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.NumericDocValues;
+import org.apache.lucene.util.Bits;
/**
* Base class for producing {@link DoubleValues}
@@ -194,7 +195,8 @@ public abstract class DoubleValuesSource {
@Override
public DoubleValues getValues(LeafReaderContext ctx, DoubleValues scores) throws IOException {
final NumericDocValues values = DocValues.getNumeric(ctx.reader(), field);
- return toDoubleValues(values, decoder::applyAsDouble);
+ final Bits matchingBits = DocValues.getDocsWithField(ctx.reader(), field);
+ return toDoubleValues(values, matchingBits, decoder::applyAsDouble);
}
@Override
@@ -261,7 +263,7 @@ public abstract class DoubleValuesSource {
}
}
- private static DoubleValues toDoubleValues(NumericDocValues in, LongToDoubleFunction map) {
+ private static DoubleValues toDoubleValues(NumericDocValues in, Bits matchingBits, LongToDoubleFunction map) {
return new DoubleValues() {
int current = -1;
@@ -274,7 +276,7 @@ public abstract class DoubleValuesSource {
@Override
public boolean advanceExact(int target) throws IOException {
current = target;
- return true;
+ return matchingBits.get(target);
}
};
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4e5a6214/lucene/core/src/java/org/apache/lucene/search/LongValuesSource.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/LongValuesSource.java b/lucene/core/src/java/org/apache/lucene/search/LongValuesSource.java
index 4165e90..9599f8d 100644
--- a/lucene/core/src/java/org/apache/lucene/search/LongValuesSource.java
+++ b/lucene/core/src/java/org/apache/lucene/search/LongValuesSource.java
@@ -23,6 +23,7 @@ import java.util.Objects;
import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.NumericDocValues;
+import org.apache.lucene.util.Bits;
/**
* Base class for producing {@link LongValues}
@@ -98,7 +99,8 @@ public abstract class LongValuesSource {
@Override
public LongValues getValues(LeafReaderContext ctx, DoubleValues scores) throws IOException {
final NumericDocValues values = DocValues.getNumeric(ctx.reader(), field);
- return toLongValues(values);
+ final Bits matchingBits = DocValues.getDocsWithField(ctx.reader(), field);
+ return toLongValues(values, matchingBits);
}
@Override
@@ -165,7 +167,7 @@ public abstract class LongValuesSource {
}
}
- private static LongValues toLongValues(NumericDocValues in) {
+ private static LongValues toLongValues(NumericDocValues in, Bits matchingBits) {
return new LongValues() {
int current = -1;
@@ -178,7 +180,7 @@ public abstract class LongValuesSource {
@Override
public boolean advanceExact(int target) throws IOException {
current = target;
- return true;
+ return matchingBits.get(target);
}
};
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4e5a6214/lucene/core/src/test/org/apache/lucene/search/TestDoubleValuesSource.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestDoubleValuesSource.java b/lucene/core/src/test/org/apache/lucene/search/TestDoubleValuesSource.java
index 3860963..13a5168 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestDoubleValuesSource.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestDoubleValuesSource.java
@@ -53,6 +53,8 @@ public class TestDoubleValuesSource extends LuceneTestCase {
document.add(new NumericDocValuesField("long", random().nextLong()));
document.add(new FloatDocValuesField("float", random().nextFloat()));
document.add(new DoubleDocValuesField("double", random().nextDouble()));
+ if (i == 545)
+ document.add(new DoubleDocValuesField("onefield", 45.72));
iw.addDocument(document);
}
reader = iw.getReader();
@@ -67,6 +69,13 @@ public class TestDoubleValuesSource extends LuceneTestCase {
super.tearDown();
}
+ public void testSortMissing() throws Exception {
+ DoubleValuesSource onefield = DoubleValuesSource.fromDoubleField("onefield");
+ TopDocs results = searcher.search(new MatchAllDocsQuery(), 1, new Sort(onefield.getSortField(true)));
+ FieldDoc first = (FieldDoc) results.scoreDocs[0];
+ assertEquals(45.72, first.fields[0]);
+ }
+
public void testSimpleFieldEquivalences() throws Exception {
checkSorts(new MatchAllDocsQuery(), new Sort(new SortField("int", SortField.Type.INT, random().nextBoolean())));
checkSorts(new MatchAllDocsQuery(), new Sort(new SortField("long", SortField.Type.LONG, random().nextBoolean())));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4e5a6214/lucene/core/src/test/org/apache/lucene/search/TestLongValuesSource.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestLongValuesSource.java b/lucene/core/src/test/org/apache/lucene/search/TestLongValuesSource.java
index 9148ad5..8b20be5 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestLongValuesSource.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestLongValuesSource.java
@@ -49,6 +49,8 @@ public class TestLongValuesSource extends LuceneTestCase {
document.add(newTextField("oddeven", (i % 2 == 0) ? "even" : "odd", Field.Store.NO));
document.add(new NumericDocValuesField("int", random().nextInt()));
document.add(new NumericDocValuesField("long", random().nextLong()));
+ if (i == 545)
+ document.add(new NumericDocValuesField("onefield", 45));
iw.addDocument(document);
}
reader = iw.getReader();
@@ -63,6 +65,13 @@ public class TestLongValuesSource extends LuceneTestCase {
super.tearDown();
}
+ public void testSortMissing() throws Exception {
+ LongValuesSource onefield = LongValuesSource.fromLongField("onefield");
+ TopDocs results = searcher.search(new MatchAllDocsQuery(), 1, new Sort(onefield.getSortField(true)));
+ FieldDoc first = (FieldDoc) results.scoreDocs[0];
+ assertEquals(45L, first.fields[0]);
+ }
+
public void testSimpleFieldEquivalences() throws Exception {
checkSorts(new MatchAllDocsQuery(), new Sort(new SortField("int", SortField.Type.INT, random().nextBoolean())));
checkSorts(new MatchAllDocsQuery(), new Sort(new SortField("long", SortField.Type.LONG, random().nextBoolean())));