Elasticsearch的高级查询

目录

一、条件查询

1、单条件

1)路由查询

 2)body体查询

2、多条件查询

1)and---must

 2)or---should

3)范围---filter

3、全文检索、完全匹配、高亮显示

 二、聚合查询

1、分组

2、求平均值


一、条件查询

1、单条件

1)路由查询

方法:get

url :http://localhost:9200/wenzhang/_search?q=name:蜡笔

介绍:q后面跟的是字段名,冒号后面是要搜索的关键字 

Elasticsearch的高级查询_第1张图片

 2)body体查询

方法:get

url:http://localhost:9200/wenzhang/_search

{"query":{"match":{"name":"蜡笔"}}}

Elasticsearch的高级查询_第2张图片

 全量查询

{"query":{"match_all":{}}}

分页查询

{"query":
    {
        "match_all":{

        } 
    },
    "from":0,
    "size":3
}

from:游标起始位 size:查询量

控制显示字段

{"query":
    {
        "match_all":{

        } 
    },
    "from":0,
    "size":3,
    "_source" : ["name"]
}

排序

{"query":
    {
        "match_all":{} 
    },
    "from":0,
    "size":3,
    "sort":{
        "age":{
            "order" : "desc"
        }
    }
}

2、多条件查询

方法:get

url:http://localhost:9200/wenzhang/_search

1)and---must

{
	"query":{
		"bool":{
            "must":[
                {
                    "match":{
                        "name":"蜡笔"
                    }
                },
                {
                    "match":{
                        "age":6
                    }
                }
            ]
		}
	}
}

Elasticsearch的高级查询_第3张图片

 2)or---should

{
	"query":{
		"bool":{
            "should":[
                {
                    "match":{
                        "name":"蜡笔"
                    }
                },
                {
                    "match":{
                        "name":"海绵宝宝"
                    }
                }
            ]
		}
	}
}

这样海绵宝宝和蜡笔小新都被查出来了

3)范围---filter

{
	"query":{
		"bool":{
            "must":[
                {
                    "match":{
                        "name":"蜡笔"
                    }
                }
            ],
            "filter" : {
                "range" : {
                    "age":{
                        "gt":5
                    }
                }
            }
		}
	}
}

这个时候搜索的就是大于5岁的蜡笔小新,如果把上面的must改成should,那会把8岁的海绵宝宝也搜出来,可见should也作用到了filter上。

3、全文检索、完全匹配、高亮显示

全文检索match,上面我们查询都是用的这个关键字,但是有个特点,name字段写"蜡笔"和"蜡小笔"都能匹配到数据,原因是es在底层做了拆词,把每个字做了倒排索引,当我们查询的时候会把每个字都拆开全文检索匹配,这样就返回了所有数据。

这不是我们想要的结果,我们就想要蜡笔小新怎么办。有办法,完全匹配。

完全匹配match_phrase,这样匹配到的都是以我们输入的name里的关键字做的匹配。

高亮显示:highlight,查询过程加入此关键字就可以把匹配到的值高亮显示。

{
	"query":{
		"bool":{
            "must":[
                {
                    "match_phrase":{
                        "name":"蜡笔"
                    }
                }
            ]
		}
	},
    "highlight":{
        "fields" : {
            "name":{}
        }
    }
}

Elasticsearch的高级查询_第4张图片

 二、聚合查询

方法:get

url:http://localhost:9200/wenzhang/_search

1、分组

{
    "aggs" : {
        "age_group" : {
            "terms" : {
                "field" : "age"
            }
        }
    },
    "size" : 0
}

Elasticsearch的高级查询_第5张图片

aggs:聚合操作

age_group:自定义聚合名称

terms:聚合的具体操作,terms代表分组

size:查询结果不显示原始数据

2、求平均值

{
    "aggs" : {
        "age_avg" : {
            "avg" : {
                "field" : "age"
            }
        }
    },
    "size" : 0
}

Elasticsearch的高级查询_第6张图片

avg:平均聚合操作

你可能感兴趣的:(Elasticsearch,elasticsearch,大数据)