mirror of https://github.com/apache/lucene.git
LUCENE-7307: Add getters to the PointInSetQuery and PointRangeQuery queries.
This commit is contained in:
parent
9863d3d2d7
commit
b977275185
|
@ -172,6 +172,9 @@ Other
|
||||||
* LUCENE-7206: Improve the ToParentBlockJoinQuery's explain by including the explain
|
* LUCENE-7206: Improve the ToParentBlockJoinQuery's explain by including the explain
|
||||||
of the best matching child doc. (Ilya Kasnacheev, Jeff Evans via Martijn van Groningen)
|
of the best matching child doc. (Ilya Kasnacheev, Jeff Evans via Martijn van Groningen)
|
||||||
|
|
||||||
|
* LUCENE-7307: Add getters to the PointInSetQuery and PointRangeQuery queries.
|
||||||
|
(Martijn van Groningen, Adrien Grand)
|
||||||
|
|
||||||
Build
|
Build
|
||||||
|
|
||||||
* LUCENE-7292: Use '-release' instead of '-source/-target' during
|
* LUCENE-7292: Use '-release' instead of '-source/-target' during
|
||||||
|
|
|
@ -17,7 +17,15 @@
|
||||||
package org.apache.lucene.search;
|
package org.apache.lucene.search;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.AbstractCollection;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.apache.lucene.document.IntPoint;
|
import org.apache.lucene.document.IntPoint;
|
||||||
import org.apache.lucene.index.FieldInfo;
|
import org.apache.lucene.index.FieldInfo;
|
||||||
|
@ -28,6 +36,7 @@ import org.apache.lucene.index.PointValues.Relation;
|
||||||
import org.apache.lucene.index.PointValues;
|
import org.apache.lucene.index.PointValues;
|
||||||
import org.apache.lucene.index.PrefixCodedTerms.TermIterator;
|
import org.apache.lucene.index.PrefixCodedTerms.TermIterator;
|
||||||
import org.apache.lucene.index.PrefixCodedTerms;
|
import org.apache.lucene.index.PrefixCodedTerms;
|
||||||
|
import org.apache.lucene.index.Term;
|
||||||
import org.apache.lucene.util.BytesRef;
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.apache.lucene.util.BytesRefBuilder;
|
import org.apache.lucene.util.BytesRefBuilder;
|
||||||
import org.apache.lucene.util.BytesRefIterator;
|
import org.apache.lucene.util.BytesRefIterator;
|
||||||
|
@ -303,6 +312,54 @@ public abstract class PointInSetQuery extends Query {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Collection<byte[]> getPackedPoints() {
|
||||||
|
return new AbstractCollection<byte[]>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<byte[]> iterator() {
|
||||||
|
int size = (int) sortedPackedPoints.size();
|
||||||
|
PrefixCodedTerms.TermIterator iterator = sortedPackedPoints.iterator();
|
||||||
|
return new Iterator<byte[]>() {
|
||||||
|
|
||||||
|
int upto = 0;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasNext() {
|
||||||
|
return upto < size;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] next() {
|
||||||
|
if (upto == size) {
|
||||||
|
throw new NoSuchElementException();
|
||||||
|
}
|
||||||
|
|
||||||
|
upto++;
|
||||||
|
BytesRef next = iterator.next();
|
||||||
|
return Arrays.copyOfRange(next.bytes, next.offset, next.length);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return (int) sortedPackedPoints.size();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getField() {
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNumDims() {
|
||||||
|
return numDims;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBytesPerDim() {
|
||||||
|
return bytesPerDim;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int hashCode() {
|
public final int hashCode() {
|
||||||
int hash = classHash();
|
int hash = classHash();
|
||||||
|
|
|
@ -218,6 +218,26 @@ public abstract class PointRangeQuery extends Query {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getField() {
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNumDims() {
|
||||||
|
return numDims;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBytesPerDim() {
|
||||||
|
return bytesPerDim;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getLowerPoint() {
|
||||||
|
return lowerPoint.clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getUpperPoint() {
|
||||||
|
return upperPoint.clone();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int hashCode() {
|
public final int hashCode() {
|
||||||
int hash = classHash();
|
int hash = classHash();
|
||||||
|
|
|
@ -22,9 +22,12 @@ import java.nio.charset.StandardCharsets;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.BitSet;
|
import java.util.BitSet;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
@ -1854,6 +1857,24 @@ public class TestPointQueries extends LuceneTestCase {
|
||||||
assertEquals("bytes:{[12] [2a]}", BinaryPoint.newSetQuery("bytes", new byte[] {42}, new byte[] {18}).toString());
|
assertEquals("bytes:{[12] [2a]}", BinaryPoint.newSetQuery("bytes", new byte[] {42}, new byte[] {18}).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testPointInSetQueryGetPackedPoints() throws Exception {
|
||||||
|
int numValues = randomIntValue(1, 32);
|
||||||
|
List<byte[]> values = new ArrayList<>(numValues);
|
||||||
|
for (byte i = 0; i < numValues; i++) {
|
||||||
|
values.add(new byte[]{i});
|
||||||
|
}
|
||||||
|
|
||||||
|
PointInSetQuery query = (PointInSetQuery) BinaryPoint.newSetQuery("field", values.toArray(new byte[][]{}));
|
||||||
|
Collection<byte[]> packedPoints = query.getPackedPoints();
|
||||||
|
assertEquals(numValues, packedPoints.size());
|
||||||
|
Iterator<byte[]> iterator = packedPoints.iterator();
|
||||||
|
for (byte[] expectedValue : values) {
|
||||||
|
assertArrayEquals(expectedValue, iterator.next());
|
||||||
|
}
|
||||||
|
expectThrows(NoSuchElementException.class, () -> iterator.next());
|
||||||
|
assertFalse(iterator.hasNext());
|
||||||
|
}
|
||||||
|
|
||||||
public void testRangeOptimizesIfAllPointsMatch() throws IOException {
|
public void testRangeOptimizesIfAllPointsMatch() throws IOException {
|
||||||
final int numDims = TestUtil.nextInt(random(), 1, 3);
|
final int numDims = TestUtil.nextInt(random(), 1, 3);
|
||||||
Directory dir = newDirectory();
|
Directory dir = newDirectory();
|
||||||
|
|
Loading…
Reference in New Issue