mirror of https://github.com/apache/lucene.git
LUCENE-7232: Fixed InetAddressPoint.newPrefixQuery.
This commit is contained in:
parent
858082c4ca
commit
2724b99b5c
|
@ -90,6 +90,9 @@ Bug Fixes
|
|||
|
||||
* LUCENE-7209: Fixed explanations of FunctionScoreQuery. (Adrien Grand)
|
||||
|
||||
* LUCENE-7232: Fixed InetAddressPoint.newPrefixQuery, which was generating an
|
||||
incorrect query when the prefix length was not a multiple of 8. (Adrien Grand)
|
||||
|
||||
Documentation
|
||||
|
||||
* LUCENE-7223: Improve XXXPoint javadocs to make it clear that you
|
||||
|
|
|
@ -174,8 +174,9 @@ public class InetAddressPoint extends Field {
|
|||
byte lower[] = value.getAddress();
|
||||
byte upper[] = value.getAddress();
|
||||
for (int i = prefixLength; i < 8 * lower.length; i++) {
|
||||
lower[i >> 3] &= ~(1 << (i & 7));
|
||||
upper[i >> 3] |= 1 << (i & 7);
|
||||
int m = 1 << (7 - (i & 7));
|
||||
lower[i >> 3] &= ~m;
|
||||
upper[i >> 3] |= m;
|
||||
}
|
||||
try {
|
||||
return newRangeQuery(field, InetAddress.getByAddress(lower), InetAddress.getByAddress(upper));
|
||||
|
|
|
@ -119,4 +119,16 @@ public class TestInetAddressPoint extends LuceneTestCase {
|
|||
assertEquals(q1.hashCode(), q2.hashCode());
|
||||
assertFalse(q1.equals(InetAddressPoint.newSetQuery("a", InetAddress.getByName("1.2.3.3"), InetAddress.getByName("1.2.3.7"))));
|
||||
}
|
||||
|
||||
public void testPrefixQuery() throws Exception {
|
||||
assertEquals(
|
||||
InetAddressPoint.newRangeQuery("a", InetAddress.getByName("1.2.3.0"), InetAddress.getByName("1.2.3.255")),
|
||||
InetAddressPoint.newPrefixQuery("a", InetAddress.getByName("1.2.3.127"), 24));
|
||||
assertEquals(
|
||||
InetAddressPoint.newRangeQuery("a", InetAddress.getByName("1.2.3.128"), InetAddress.getByName("1.2.3.255")),
|
||||
InetAddressPoint.newPrefixQuery("a", InetAddress.getByName("1.2.3.213"), 25));
|
||||
assertEquals(
|
||||
InetAddressPoint.newRangeQuery("a", InetAddress.getByName("2001::a000:0"), InetAddress.getByName("2001::afff:ffff")),
|
||||
InetAddressPoint.newPrefixQuery("a", InetAddress.getByName("2001::a6bd:fc80"), 100));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue