Class InetAddressPoint

java.lang.Object
org.apache.lucene.document.Field
org.apache.lucene.document.InetAddressPoint
All Implemented Interfaces:
IndexableField

public class InetAddressPoint extends Field
An indexed 128-bit InetAddress field.

Finding all documents within a range at search time is efficient. Multiple values for the same field in one document is allowed.

This field defines static factory methods for creating common queries:

This field supports both IPv4 and IPv6 addresses: IPv4 addresses are converted to IPv4-Mapped IPv6 Addresses: indexing 1.2.3.4 is the same as indexing ::FFFF:1.2.3.4.

See Also:
  • Field Details

    • BYTES

      public static final int BYTES
      The number of bytes per dimension: 128 bits
      See Also:
    • MIN_VALUE

      public static final InetAddress MIN_VALUE
      The minimum value that an ip address can hold.
    • MAX_VALUE

      public static final InetAddress MAX_VALUE
      The maximum value that an ip address can hold.
  • Constructor Details

    • InetAddressPoint

      public InetAddressPoint(String name, InetAddress point)
      Creates a new InetAddressPoint, indexing the provided address.
      Parameters:
      name - field name
      point - InetAddress value
      Throws:
      IllegalArgumentException - if the field name or value is null.
  • Method Details

    • nextUp

      public static InetAddress nextUp(InetAddress address)
      Return the InetAddress that compares immediately greater than address.
      Throws:
      ArithmeticException - if the provided address is the maximum ip address
    • nextDown

      public static InetAddress nextDown(InetAddress address)
      Return the InetAddress that compares immediately less than address.
      Throws:
      ArithmeticException - if the provided address is the minimum ip address
    • setInetAddressValue

      public void setInetAddressValue(InetAddress value)
      Change the values of this field
    • setBytesValue

      public void setBytesValue(BytesRef bytes)
      Description copied from class: Field
      Expert: change the value of this field. See Field.setStringValue(String).

      NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field.

      Overrides:
      setBytesValue in class Field
    • toString

      public String toString()
      Description copied from class: Field
      Prints a Field for human consumption.
      Overrides:
      toString in class Field
    • encode

      public static byte[] encode(InetAddress value)
      Encode InetAddress value into binary encoding
    • decode

      public static InetAddress decode(byte[] value)
      Decodes InetAddress value from binary encoding
    • newExactQuery

      public static Query newExactQuery(String field, InetAddress value)
      Create a query for matching a network address.
      Parameters:
      field - field name. must not be null.
      value - exact value
      Returns:
      a query matching documents with this exact value
      Throws:
      IllegalArgumentException - if field is null.
    • newPrefixQuery

      public static Query newPrefixQuery(String field, InetAddress value, int prefixLength)
      Create a prefix query for matching a CIDR network range.
      Parameters:
      field - field name. must not be null.
      value - any host address
      prefixLength - the network prefix length for this address. This is also known as the subnet mask in the context of IPv4 addresses.
      Returns:
      a query matching documents with addresses contained within this network
      Throws:
      IllegalArgumentException - if field is null, or prefixLength is invalid.
    • newRangeQuery

      public static Query newRangeQuery(String field, InetAddress lowerValue, InetAddress upperValue)
      Create a range query for network addresses.

      You can have half-open ranges (which are in fact </≤ or >/≥ queries) by setting lowerValue = InetAddressPoint.MIN_VALUE or upperValue = InetAddressPoint.MAX_VALUE.

      Ranges are inclusive. For exclusive ranges, pass InetAddressPoint#nextUp(lowerValue) or InetAddressPoint#nexDown(upperValue).

      Parameters:
      field - field name. must not be null.
      lowerValue - lower portion of the range (inclusive). must not be null.
      upperValue - upper portion of the range (inclusive). must not be null.
      Returns:
      a query matching documents within this range.
      Throws:
      IllegalArgumentException - if field is null, lowerValue is null, or upperValue is null
    • newSetQuery

      public static Query newSetQuery(String field, InetAddress... values)
      Create a query matching any of the specified 1D values. This is the points equivalent of TermsQuery.
      Parameters:
      field - field name. must not be null.
      values - all values to match