IP查询
# IP
提示
ES本身对IP查询作了非常友好的支持,所以很适合用来存储和查询IP,需要值得注意的是,IP对应的字段其索引类型必须建立为ip类型,不可以 是text,keyword或者默认类型,否则在后面的查询中你会发现实现不了你想要的IP范围检索.
# 最佳实践
public class Document{
// 省略其它字段...
@IndexField(fieldType = FieldType.IP)
private String ipAddress;
}
1
2
3
4
5
2
3
4
5
增删改与其它类型字段并无二致,不再演示,假设我已经录入一条ip地址为"192.168.1.1"至es中
@Test
public void testIp(){
// 精确查询
LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
wrapper.eq(Document::getIpAddress,"192.168.1.1");
List<Document> documents = documentMapper.selectList(wrapper);
// 范围检索
LambdaEsQueryWrapper<Document> wrapper1 = new LambdaEsQueryWrapper<>();
wrapper1.eq(Document::getIpAddress,"192.168.0.0/16");
List<Document> documents1 = documentMapper.selectList(wrapper);
// ip模糊匹配 es不支持
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
对于上面的IPv4的IP地址含有4个bytes,而每个byte含有8个digits,在上面的/16即表示前面的16位的digits,即192.168,因此只要位于192.168.0.0 至 192.168.255.255 的IP都可以被上面的检索条件检索出来.
帮助我们改善此文档 (opens new window)
上次更新: 2024/05/18