ES查询相关
查询所有数据、搜索所有数据
es.search(index="my_index",doc_type="test_type")
或者
body = {
"query":{
"match_all":{}
}
}
es.search(index="my_index",doc_type="test_type",body=body)
term与terms
body = {
"query":{
"term":{
"name":"python"
}
}
}
查询name="python"的所有数据
es.search(index="my_index",doc_type="test_type",body=body)
terms
body = {
"query":{
"terms":{
"name":["python","android"]
}
}
}
搜索出name="python"或name="android"的所有数据
es.search(index="my_index",doc_type="test_type",body=body)
match与multi_match
match:匹配name包含python关键字的数据
body = {
"query":{
"match":{
"name":"python"
}
}
}
查询name包含python关键字的数据
es.search(index="my_index",doc_type="test_type",body=body)
multi_match:在name和addr里匹配包含深圳关键字的数据
body = {
"query":{
"multi_match":{
"query":"深圳",
"fields":["name","addr"]
}
}
}
查询name和addr包含"深圳"关键字的数据
es.search(index="my_index",doc_type="test_type",body=body)
ids
body = {
"query":{
"ids":{
"type":"test_type",
"values":[
"1","2"
]
}
}
}
搜索出id为1或2d的所有数据
es.search(index="my_index",doc_type="test_type",body=body)
复合查询bool
bool有3类查询关系,must(都满足),should(其中一个满足),must_not(都不满足)
body = {
"query":{
"bool":{
"must":[
{
"term":{
"name":"python"
}
},
{
"term":{
"age":18
}
}
]
}
}
}
获取name="python"并且age=18的所有数据
es.search(index="my_index",doc_type="test_type",body=body)
切片式查询
body = {
"query":{
"match_all":{}
}
"from":2
"size":4
}
从第2条数据开始,获取4条数据
es.search(index="my_index",doc_type="test_type",body=body)
范围查询
body = {
"query":{
"range":{
"age":{
"gte":18,
"lte":30
}
}
}
}
查询18<=age<=30的所有数据
es.search(index="my_index",doc_type="test_type",body=body)
前缀查询
body = {
"query":{
"prefix":{
"name":"p"
}
}
}
查询前缀为"赵"的所有数据
es.search(index="my_index",doc_type="test_type",body=body)
通配符查询
body = {
"query":{
"wildcard":{
"name":"*id"
}
}
}
查询name以id为后缀的所有数据
es.search(index="my_index",doc_type="test_type",body=body)
排序
根据age字段升序排序;asc升序,desc降序
body = {
"query":{
"match_all":{}
}
"sort":{
"age":{
"order":"asc"
}
}
}
filter_path
响应过滤
只需要获取_id数据,多个条件用逗号隔开
es.search(index="my_index",doc_type="test_type",filter_path=["hits.hits._id"])
获取所有数据
es.search(index="my_index",doc_type="test_type",filter_path=["hits.hits._*"])
count
执行查询并获取该查询的匹配数
获取数据量
es.count(index="my_index",doc_type="test_type")
度量类聚合
获取最小值
body = {
"query":{
"match_all":{}
},
"aggs":{
"min_age":{
"min":{
"field":"age"
}
}
}
}
搜索所有数据,并获取age最小的值
es.search(index="my_index",doc_type="test_type",body=body)
获取最大值
body = {
"query":{
"match_all":{}
},
"aggs":{
"max_age":{
"max":{
"field":"age"
}
}
}
}
搜索所有数据,并获取age最大的值
es.search(index="my_index",doc_type="test_type",body=body)
获取和
body = {
"query":{
"match_all":{}
},
"aggs":{
"sum_age":{
"sum":{
"field":"age"
}
}
}
}
搜索所有数据,并获取所有age的和
es.search(index="my_index",doc_type="test_type",body=body)
获取平均值
:获取所有age的平均值
body = {
"query":{
"match_all":{}
},
"aggs":{
"avg_age":{
"avg":{
"field":"age"
}
}
}
}
搜索所有数据,获取所有age的平均值
es.search(index="my_index",doc_type="test_type",body=body)
短语搜索
我们想要查询同时包含"rock"和"climbing"(并且是相邻的)的员工记录。
要做到这个,我们只要将match查询变更为match_phrase查询即可:
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
}
}