查询语法
- match all query
{
"query": {
"match_all": {}
}
}
- define query number
{
"query": {
"match_all": {}
},
"from": 2, // 从2条记录开始取
"size": 4, // 取4条数据
"sort": {
"studentNo": { // 按studentNo字段升序
"order": "asc"// 降序为desc
}
}
}
- term query
{
"query": {
"term": {
"name": "诸葛亮"
}
}
}
- bool query
{
"query": {
"bool": {
"must": [ //与之对应的还有should must not
{
"term": {
"classNo": "2"
}
},
{
"term": {
"isLeader": "true"
}
}
]
}
}
}
- ids query
{
"query": {
"ids": {
"type": "student",
"values": [
"1",
"2"
]
}
}
}
- prefix query
{
"query": {
"prefix": {
"name": "赵"
}
}
}
- range query
{
"query": {
"range": {
"age": {
"gte": "18", // 表示>=
"lte": "20" // 表示<=
}
}
}
}
- terms query
{
"query": {
"terms": {
"studentNo": [
"1",
"3"
]
}
}
}
- wildcard query
{
"query": {
"wildcard": {
"name": "*亮"
}
}
}
- regexp query
{
"query": {
"regexp": {
"address": ".*长沙市.*" // 这里的.号表示任意一个字符
}
}
}
- term filter
{
"filter": {
"term": {
"name": "诸葛亮",
"_cache" : true // 与query主要是这里的区别,可以设置数据缓存
}
}
}
- bool filter
{
"filter": {
"bool": {
"must": [
{
"term": {
"classNo": "2"
}
},
{
"term": {
"isLeader": "true"
}
}
]
}
}
}
- and filter
{
"filter": {
"and": [
{
"term": {
"classNo": "2"
}
},
{
"term": {
"isLeader": "true"
}
}
]
}
}
- or filter
{
"filter": {
"or": [
{
"term": {
"classNo": "2"
}
},
{
"term": {
"isLeader": "true"
}
}
]
}
}
- esists filter
{
"filter": {
"exists": {
"field": "address"
}
}
}
- miss filter
{
"filter": {
"missing": {
"field": "address"
}
}
}
- prefix filter
{
"filter": {
"prefix": {
"name": "赵"
}
}
}
- range filter
{
"filter": {
"range": {
"age": {
"gte": "18",
"lte": "20"
}
}
}
- terms filter
{
"filter": {
"terms": {
"studentNo": [
"1",
"3"
]
}
}
}
- regexp filter
{
"filter": {
"regexp": {
"address": ".*长沙市.*"
}
}
}
聚合api
1.metric(度量聚合)多用于number计算
2.bucketing(桶聚合)类似与sql分组
- 聚合api格式
"aggregations" : { // 表示聚合操作,可以使用aggs替代
"<aggregation_name>" : { // 聚合名,可以是任意的字符串。用做响应的key,便于快速取得正确的响应数据。
"<aggregation_type>" : { // 聚合类别,就是各种类型的聚合,如min等
<aggregation_body> // 聚合体,不同的聚合有不同的body
}
[,"aggregations" : { [<sub_aggregation>]+ } ]? // 嵌套的子聚合,可以有0或多个
}
[,"<aggregation_name_2>" : { ... } ]* // 另外的聚合,可以有0或多个
}
度量聚合
- min agg
"aggs": {
"min_age": {
"min": {
"field": "age"
}
}
}
- max agg
"aggs": {
"max_age": {
"max": {
"field": "age"
}
}
}
- sum agg
"aggs": {
"sum_age": {
"sum": {
"field": "age"
}
}
}
- avg agg
"aggs": {
"avg_age": {
"avg": {
"field": "age"
}
}
}
- stats agg
"aggs": {
"stats_age": {
"stats": {
"field": "age"
}
}
}
- top hits agg
"aggs": {
"top_age": {
"top_hits": {
"sort": [ // 排序
{
"age": { // 按年龄降序
"order": "desc"
}
}
],
"_source": {
"include": [ // 指定返回字段
"name",
"age"
]
},
"size": 2 // 取前2条数据
}
}
}
桶聚合
- terms agg
"aggs": {
"terms_classNo": {
"terms": {
"field": "classNo", // 按照班号进行分组
"order": { // 按学生数从大到小排序
"_count": "desc"
},
"size": 2 // 取前两名
}
}
}
- range agg
"aggs": {
"range_age": {
"range": {
"field": "age",
"ranges": [
{
"to": 15
},
{
"from": "16",
"to": "18"
},
{
"from": "19",
"to": "21"
},
{
"from": "22",
"to": "24"
},
{
"from": "25"
}
]
}
}
}
- date range agg
"aggs": {
"range_age": {
"date_range": {
"field": "birthday",
"ranges": [
{
"to": "now-25y"
}
]
}
}
}
- histogram agg
"aggs": {
"histogram_age": {
"histogram": {
"field": "age",
"interval": 2, // 距离为2
"min_doc_count": 1 // 只返回记录数量大于等于1的区间
}
}
}
- date histogram agg
"aggs": {
"data_histogram_birthday": {
"date_histogram": {
"field": "birthday",
"interval": "year", // 按年统计
"format": "yyyy" // 返回结果的key的格式
}
}
}
- missing agg
"aggs": {
"missing_address": {
"missing": {
"field": "address"
}
}
}
- 嵌套查询班内年龄最大的
"aggs": {
"missing_address": {
"terms": {
"field": "classNo"
},
"aggs": { // 在这里嵌套新的子聚合
"max_age": {
"max": { // 使用max聚合
"field": "age"
}
}
}
}
}
压缩存储算法:
term index fst算法:字母前缀匹配
多个field倒排索引:bitmaps 按位与运算
- Roaring bitmaps
[1,3,4,7,10] [1,0,1,1,0,0,1,0,0,1]
增量编码压缩算法:从小到大排列,数据增量存储
监控元数据;
get /index/_search
_settings
_segments
_stats
_flush
_refresh
_count
_mapping