ElasticSearch-(三)ElasticSearch高级查询等操作

本文最后更新于:February 25, 2022 pm

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎。Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

目录

查询时,实际的效果等同于模糊查询,原因在于插入文档时,自动进行了分词操作。而且也会对查询的条件进行分词。

条件查询

路径带参数

发送 GET 请求或者 POST 请求:http://127.0.0.1:9200/user/_search?q=Key:Value

例如:

1
http://127.0.0.1:9200/user/_search?q=author:DragonOne

请求体带参数

发送 GET 请求或者 POST 请求:http://127.0.0.1:9200/user/_search

请求体:

1
2
3
4
5
6
7
{
"query":{
"match":{
"author":"DragonOne" //查询条件的key和value
}
}
}

这种方式也可以实现全查询,请求一样,不同的是请求体:

1
2
3
4
5
6
{
"query":{
"match_all":{
}
}
}

分页查询

发送 GET 请求或者 POST 请求:http://127.0.0.1:9200/user/_search

请求体:

1
2
3
4
5
6
7
8
{
"query":{
"match_all":{
}
},
"from" : 0, //当前页的第一条数据
"size" : 2 //页大小
}

控制查询的字段:

1
2
3
4
5
6
7
8
9
{
"query":{
"match_all":{
}
},
"from" : 0,
"size" : 2,
"_source" : ["name"] //查询显示指定字段
}

排序

发送 GET 请求或者 POST 请求:http://127.0.0.1:9200/user/_search

请求都一样,至少请求体不一样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"query":{
"match_all":{
}
},
"from" : 0,
"size" : 2,
"_source" : ["name"],
"sort" : {
"price" : { //根据某一个字段的值排序
"order" : "asc" //或者desc
}
}
}

多条件查询

发送 GET 请求或者 POST 请求:http://127.0.0.1:9200/user/_search

请求一样,请求体不同:

全部成立

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"query" : {
"bool" : {
"must" : [ //必须同时成立,and &
{
"match" : {
"name" : "墨水记忆" //条件一
}
},
{
"match" : {
"url" : "www.tothefor.com" //条件二
}
}
]
}
}
}

满足其一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"query" : {
"bool" : {
"should" : [ //有一个成立即可,or |
{
"match" : {
"name" : "墨水记忆" //条件一
}
},
{
"match" : {
"url" : "www.tothefor.com" //条件二
}
}
]
}
}
}

范围查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"query" : {
"bool" : {
"should" : [ //有一个成立即可,or |
{
"match" : {
"name" : "墨水记忆" //条件一
}
},
{
"match" : {
"url" : "www.tothefor.com" //条件二
}
}
],
"filter" : {
"range" : {
"price" : { //根据某一个字段的范围查询
"gt" : 5000 //大于
}
}
}
}
}
}

精准匹配

上面的都是全文匹配(模糊查询),现在就是完全匹配(精准匹配)。

1
2
3
4
5
6
7
{
"query":{
"match_phrase":{
"author":"DragonOne" //查询条件的key和value
}
}
}

高亮显示

1
2
3
4
5
6
7
8
9
10
11
12
{
"query":{
"match_phrase":{
"author":"DragonOne" //查询条件的key和value
}
},
"highlight" : {
"fields" : {
"author" : {} //需要高亮的字段
}
}
}