如何使用 IP Range 或 CIDR 作為過濾條件
-
ElasticSearch 支援 IP Range 查詢
"ip_range" : { "field" : "ip", "ranges" : [ { "to" : "10.0.0.5" }, { "from" : "10.0.0.5" } ] }
也支援 CIDR 查詢
network : [ "169.254.0.0/16", "fe80::/64" ]
MongoDB 有支援對應查詢語法嗎
-
MongoDB目前沒有對應這種IP區間的寫法
如果真的要做這種IP的範圍搜尋,做法可能會比較麻煩一點
可以將IP字串點之間補滿三位數 如 010.000.000.005 去做字串區間比對
-
所以是要自定 js function 於查詢時轉換? 還是從原始資料轉換?
-
-
何不將 IPv4 拆開成 A.B.C.D 四個部份存放,在下查詢條件的時候更方便?
建議用短整數數值存放方便比較查詢計算和節省存放空間。
-
ElasticSearch 本身有提供 ip 型別, 支援 ipv4 和 ipv6
Mongodb 不支援該型別情況下, 似乎真的只能自己做處理
如果要同時支援 ipv4 和 ipv6 又要支援 rnage 似乎存成數值比較方便
-
這裡有篇 nodejs 的作法
[How to store IP Addresses in MongoDB using Javascript - ddiguru.com](http://ddiguru.com/blog/156-how-to-store-ip-addresses-in-mongodb-using-javascript)
-
把 IP 存成 Binary 格式似乎是個不錯的方式,學習了~
-
把 IP 存成 Binary 格式 這招我倒沒想到, 長知識了
-
Mongo 支援 Regular Express,一些 IP 區段可能可以用 RegExp 來查,只不過效能應該不怎麼理想。
-
字串比對原本效率就不好了,能用數值盡量用數值。