1.wildcard
称为通配符查询,和
SQL
的like
是一个套路,最常用,可以用来模糊查询,但是匹配字段类型只支持text
和keyword
类型,eg:
"query":{
"wildcard":{
"ip_address":{
"value":"*2606:2800*"
}
}
}
2.将字段存储为ip类型
此时使用term、match、bool等都可以支持模糊检索,并且ip类型支持ip段、ip范围查询
-
IPV4 模糊查询转换
eg: ip_address 的值为: 120.26.195.54
输入一段:120. 需要转换为:120.0.0.0/8
输入两段:120.26. 需要转换为:120.26.0.0/16
输入三段:120.26.195. 需要转换为:120.26.195.0/24
-
IPV6模糊查询转换
eg: ip_address 的值为: 2606:2800:220:1:248:1893:25c8:1946
输入一段:2606: 需要转换为:2606::/16
输入两段:2606:2800: 需要转换为:2606:2800::/32
输入三段:2606:2800:220: 需要转换为:2606:2800:220::/48
以此类推...........
-
检索结果
GET /lfq_demo_personal/_search
{
"query": {
"term": {
"ipaddress": "2606:2800::/32"
}
}
}
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "lfq_demo_personal",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "ElasticSearch",
"age" : 24,
"birthday" : "1999-05-28T11:13:16+08:00",
"hobby" : "ElasticSearch热爱Java,喜欢打篮球",
"ipaddress" : "2606:2800:220:1:248:1893:25c8:1946"
}
},
{
"_index" : "lfq_demo_personal",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"name" : "理遇",
"age" : 24,
"birthday" : "1999-05-28T11:13:16+08:00",
"hobby" : "理遇热爱Java,喜欢打篮球",
"ipaddress" : "2606:2800:220:1:248:1893:25c8:1946"
}
}
]
}
}