初步学习es查询
基础查询
查询方式get indexName/_search
下面是一个把基础查询都写入的语句,格式是错误的,只是方便展示。
源自:https://blog.csdn.net/guaotianxia/article/details/124249348
{
"size":10 //返回的条数
"query":{
"match_all":{}//不做匹配返回所有数据
//分词匹配,如果字段做了分词设置,会去查询分词,如果没做则全段匹配
"match":{
"fieldName":"value"
}
//精确匹配,输入的条件是什么,字段值就要全等于这个条件
"term":{
"fieldName":"value"
}
//精确多匹配,类似in
"terms":{
"fieldName":["value1","value2"]
}
}
}
正确写法应该是
{
"size":10 //返回的条数
"query":{
"match_all":{}//不做匹配返回所有数据
}
}
然后是高级一点的bool
就是可以执行and和or,between的查询
上代码
GET /demo_person/_search
{
"query": {
"bool": {
"must": [
{"match": {
"last_name": "Smith"
}}
],
"filter": [
{"range": {
"age": {
"gte": 30
}
}}
],
"should":[
],
}
}
}
must:与关系,相当于关系型数据库中的 and。
should:或关系,相当于关系型数据库中的 or。
must_not:非关系,相当于关系型数据库中的 not。
filter:过滤条件。
range:条件筛选范围。
gt:大于,相当于关系型数据库中的 >。
gte:大于等于,相当于关系型数据库中的 >=。
lt:小于,相当于关系型数据库中的 <。
lte:小于等于,相当于关系型数据库中的 <=
nested
https://blog.csdn.net/wlei0618/article/details/126508180
模糊查询
GET /demo_person/_search
{
"query": {
"bool": {
"filter": [
{
"wildcard":{
"last_name":"*mi*"
}
}]
}
}
}
数据去重和显示去重后条数
数据根据字段去重
{
"query":{
"match_all":{
}
},
"collapse":{
# 根据哪个字段去去重 uid
"field":"uid"
}
}
获取去重后的数量
{
"from": 0,
"size": 0,
"aggs": {
"my":{
"terms":{
"field": "uid"
}
}
}
}
返回结果
"aggregations": {
"my": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "北京",
"doc_count": 105
},
{
"key": "上海",
"doc_count": 1
}
]
}
}