python 倒排索引 正则表达式查询_elasticsearch学习笔记高级篇(十四)——实战前缀搜索、通配符搜索、正则搜索...

准备数据:

PUT /test_index/_create/1

{

"test_field": "C3D0-KD345"

}

PUT /test_index/_create/2

{

"test_field": "C3K5-DFG65"

}

PUT /test_index/_create/3

{

"test_field": "C4I8-UI365"

}

前缀搜索:

原理:前缀匹配不会计算相关度分数,与前缀过滤的唯一区别就是过滤会有cache bitset。它会扫描整个倒排索引。找到符合前缀条件的文档。所以说前缀越短,要处理的文档就越多,性能就越差,尽可能应该用长前缀搜索。

示例,搜索前缀为C3的文档:

GET /test_index/_search

{

"query": {

"match_phrase_prefix": {

"test_field": "C3"

}

}

}

结果:

{

"took" : 16,

"timed_out" : false,

"_shards" : {

"total" : 1,

"successful" : 1,

"skipped" : 0,

"failed" : 0

},

"hits" : {

"total" : {

"value" : 2,

"relation" : "eq"

},

"max_score" : 0.9808292,

"hits" : [

{

"_index" : "test_index",

"_type" : "_doc",

"_id" : "1",

"_score" : 0.9808292,

"_source" : {

"test_field" : "C3D0-KD345"

}

},

{

"_index" : "test_index",

"_type" : "_doc",

"_id" : "2",

"_score" : 0.9808292,

"_source" : {

"test_field" : "C3K5-DFG65"

}

}

]

}

}

通配符搜索:

通配符搜索跟前缀搜索类似,比前缀搜索要更加强大。也是需要扫描整个倒排索引,性能也是很差的。

?:表示匹配任意一个字符

:表示匹配任意多个字符

示例:通配符搜索条件为*4?的文档

GET /test_index/_search

{

"query": {

"wildcard": {

"test_field": {

"value": "*4?"

}

}

}

}

输出结果:

{

"took" : 1,

"timed_out" : false,

"_shards" : {

"total" : 1,

"successful" : 1,

"skipped" : 0,

"failed" : 0

},

"hits" : {

"total" : {

"value" : 1,

"relation" : "eq"

},

"max_score" : 1.0,

"hits" : [

{

"_index" : "test_index",

"_type" : "_doc",

"_id" : "1",

"_score" : 1.0,

"_source" : {

"test_field" : "C3D0-KD345"

}

}

]

}

}

正则搜索:

regexp可以说功能比之前的通配符搜索功能更加强大,但是都会扫描整个倒排索引,性能也是会非常的差。

[0-9]:指定范围内的数字

[a-z]:指定范围内的字母

.:一个字符

+:前面的正则表达式可以出现一次或多次

*:前面的正则表达式可以出现零次或多次

{n}: n是非负整数,表示匹配n次

示例,搜索条件为.*[a-z]{3}[0-9]{2}的文档

GET /test_index/_search

{

"query": {

"regexp": {

"test_field": {

"value": ".*[a-z]{3}[0-9]{2}"

}

}

}

}

输出结果:

{

"took" : 1,

"timed_out" : false,

"_shards" : {

"total" : 1,

"successful" : 1,

"skipped" : 0,

"failed" : 0

},

"hits" : {

"total" : {

"value" : 1,

"relation" : "eq"

},

"max_score" : 1.0,

"hits" : [

{

"_index" : "test_index",

"_type" : "_doc",

"_id" : "2",

"_score" : 1.0,

"_source" : {

"test_field" : "C3K5-DFG65"

}

}

]

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值