0.0.0.0
에서 255.255.255.255
범위의 모든 IP 주소를 검색하는 데 ConstantScoreRangeQuery
을 사용하고 있습니다. 이것은 거의 모든 IPv4 주소를 검색합니다.ConstantScoreRangeQuery가 IP 범위 쿼리에 대해 올바른 결과를 제공하지 않습니다.
모든 IP 주소를 문자열로 변환하고 색인을 생성합니다. 예를 들어, 0.0.0.0
은 00000000
이되고 255.255.255.255
은 ffffffff
이되며 여기서 각 2 개의 문자는 1 옥텟입니다. I에서 IPv4는 물론 IPv6 모두를 저장하고 ConstantScoreRangeQuery(fldIdStr, "00000000", "ffffffff", true, true)
: 나는 IP 주소를 검색하고 할 때 다음과 같이
, 나는 쿼리를 만드는 오전. 이 쿼리는 IPv6도 반환합니다.Lucene (lucene-core-2.4.0.jar) 2.4.0을 사용하고 있습니다.
IP 범위 내에서 IPv4 주소 만 가져 오는 방법은 무엇입니까?
내 대답에 뭔가 빠져있을 수 있습니다. 왜 IPv4.com 주소를 String.compareTo와 비교할 수 없습니까?내 생각에, 사전 편집 순서는 보장 된 동일한 길이의 두 16 진수를 비교하는 데는 잘 작동합니다. – femtoRgon
그리고 정확히 ipv6 주소와 ipv6 주소를 어떻게 비교 하시겠습니까? 또한 CIDR 표기법 및 정수 표기법이 있음을 잊지 마십시오. http : // 2915189354 (링크 작동을위한 공간 제거) – mindas
예, 지정된 표기법을 사용하지 않고 IP 주소를 비교하는 것은 상당히 복잡하지만 OP가 CIDR, 정수 및 점 십진수 표기법을 없앰으로써 형식 (간단히 8 자리 16 진수)이 유일한 문제는 IPv6 결과를 제거하는 것입니다. 맞습니까? – femtoRgon