ElasticSearch高级查询

首先预览一下ES的几种查询方式:



1、模糊匹配
restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:match

以上篇文章中book索引为例,模糊匹配title字段:

{
        "query":{
                "match":{
                        "title":"ElasticSearch入门"
                }
        }
}
匹配结果:



从结果中可以看出ES的模糊匹配是分词模糊匹配,我们输入“ElasticSearch入门”,只要含有“入门”和“ElasticSearch”的数据全都匹配出来了。那如果我们想要实现mysql的那种模糊匹配怎么做呢?我们可以用其余匹配。

2、其余匹配
restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:match_phrase

{
        "query":{
                "match_phrase":{
                        "title":"ElasticSearch入门"
                }
        }
}
匹配结果:



此时便做到了mysql中的模糊匹配。

3、多个字段查询 
restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:multi_match

{
        "query":{
                "multi_match":{
                        "query":"王宝宝",
                        "fields":["author","title"]
                }
        }
}
匹配结果:



title和author只要是包含“王宝宝”的数据都查询出来。

4、语法查询
restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:query_string

{
        "query":{
                "query_string":{
                        "query":"(ElasticSearch and python) or 王宝宝"
                }
        }
}
所有字段只要包含 ElasticSerach python 王宝宝数据的都查询出来。

5、字段级别查询
restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:term

{
        "query":{
                "term":{
                        "word_count":4000
                }
        }
}
查询结果为word_count=4000的数据。

6、范围查询
restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:range

{
        "query":{
                "range":{
                        "word_count":{
                                "gte":1000,
                                "lte":2000
                        }
                }
        }
}
结果为查询1000到2000字数的书籍,gte:大于等于 gt:大于 lte:小于等于 lt:小于。

7、Filter context查询
restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:bool、filter

Filter和上面的几种Query查询的区别:

1、Filter匹配结果只有Yes 或 No。Query除了查询数据外,还会对数据结果进行分数评估,计算命中率。

2、Filter顾名思义就是过滤数据,同时还会对数据做缓存,所以比Query速度要快一些。

{
        "query":{
                "bool":{
                        "filter":{
                                "term":{
                                        "word_count":1000
                                }
                        }
                }
        }
}
8、固定分数查询
restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:constant_score、boost

ES的查询结果中会有_score的分数,通过固定分数查询,可以筛选指定的分数。

{
        "query":{
                "constant_score":{
                        "filter":{
                                "match":{
                                        "title":"ElasticSearch"
                                }
                        },
                        "boost":2
                }
        }
}
9、布尔查询
restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:bool、should

匹配所有author=王宝宝 或者 title=ElasticSearch的数据

{
        "query":{
                "bool":{
                        "should":[
                                {
                                        "match":{
                                                "author":"王宝宝"
                                        }
                                },{
                                        "match":{
                                                "title":"ElasticSearch"
                                        }
                                }
                        ]
                }
        }
}
匹配所有author=王宝宝 并且 title=ElasticSearch的数据:

关键词:must

{
        "query":{
                "bool":{
                        "must":[
                                {
                                        "match":{
                                                "author":"王宝宝"
                                        }
                                },{
                                        "match":{
                                                "title":"ElasticSearch"
                                        }
                                }
                        ]
                }
        }
}
匹配author != 王宝宝的数据:

关键词:must_not

{
        "query":{
                "bool":{
                        "must_not":[
                                {
                                        "match":{
                                                "author":"王宝宝"
                                        }
                                }
                        ]
                }
        }
}

--------------------- 
作者:花群子 
来源:CSDN 
原文:https://blog.csdn.net/wenwen513/article/details/84887804 
版权声明:本文为博主原创文章,转载请附上博文链接!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值