我正在使用ConstantScoreRangeQuery
來搜索範圍爲0.0.0.0
到255.255.255.255
範圍內的所有IP地址。這幾乎是搜索所有IPv4地址。ConstantScoreRangeQuery未給出ip範圍查詢的正確結果
我將我所有的IP地址轉換爲字符串並將它們編入索引。例如,0.0.0.0
變爲00000000
而255.255.255.255
變爲ffffffff
,其中每2個字符是一個八位字節。
當我尋找IP地址,我創建一個查詢,如下所示: ConstantScoreRangeQuery(fldIdStr, "00000000", "ffffffff", true, true)
我儲存的IPv4,如IPv6。該查詢也返回IPv6。
我使用的是Lucene(lucene-core-2.4.0.jar)2.4.0;
如何獲得IP範圍內的IPv4地址?
我可能在我的答案中缺少某些東西。爲什麼不能將IPv4地址與String.compareTo進行比較?在我看來,字典順序應該可以很好地用於比較兩個保證等長的十六進制數。 – femtoRgon
如何比較ipv4地址和ipv6地址?另外,不要忘記有CIDR表示法和整數表示法,例如http:// 2915189354(刪除空格以獲取鏈接的工作) – mindas
是的,比較IP地址時沒有指定的記號是非常複雜的,但是考慮到OP通過保證消除了CIDR,整數,甚至點十進制記號一個格式(簡單的8位十六進制數字),唯一的問題就是消除IPv6結果,對嗎? – femtoRgon