查詢語法
- match all query
{
"query": {
"match_all": {}
}
}
- define query number
{
"query": {
"match_all": {}
},
"from": 2, // 從2條記錄開始取
"size": 4, // 取4條數(shù)據(jù)
"sort": {
"studentNo": { // 按studentNo字段升序
"order": "asc"http:// 降序?yàn)閐esc
}
}
}
- term query
{
"query": {
"term": {
"name": "諸葛亮"
}
}
}
- bool query
{
"query": {
"bool": {
"must": [ //與之對(duì)應(yīng)的還有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": ".*長沙市.*" // 這里的.號(hào)表示任意一個(gè)字符
}
}
}
- term filter
{
"filter": {
"term": {
"name": "諸葛亮",
"_cache" : true // 與query主要是這里的區(qū)別,可以設(shè)置數(shù)據(jù)緩存
}
}
}
- 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計(jì)算
2.bucketing(桶聚合)類似與sql分組
- 聚合api格式
"aggregations" : { // 表示聚合操作,可以使用aggs替代
"<aggregation_name>" : { // 聚合名,可以是任意的字符串。用做響應(yīng)的key,便于快速取得正確的響應(yīng)數(shù)據(jù)。
"<aggregation_type>" : { // 聚合類別,就是各種類型的聚合,如min等
<aggregation_body> // 聚合體,不同的聚合有不同的body
}
[,"aggregations" : { [<sub_aggregation>]+ } ]? // 嵌套的子聚合,可以有0或多個(gè)
}
[,"<aggregation_name_2>" : { ... } ]* // 另外的聚合,可以有0或多個(gè)
}
度量聚合
- 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條數(shù)據(jù)
}
}
}
桶聚合
- terms agg
"aggs": {
"terms_classNo": {
"terms": {
"field": "classNo", // 按照班號(hào)進(jìn)行分組
"order": { // 按學(xué)生數(shù)從大到小排序
"_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 // 只返回記錄數(shù)量大于等于1的區(qū)間
}
}
}
- date histogram agg
"aggs": {
"data_histogram_birthday": {
"date_histogram": {
"field": "birthday",
"interval": "year", // 按年統(tǒng)計(jì)
"format": "yyyy" // 返回結(jié)果的key的格式
}
}
}
- missing agg
"aggs": {
"missing_address": {
"missing": {
"field": "address"
}
}
}
- 嵌套查詢班內(nèi)年齡最大的
"aggs": {
"missing_address": {
"terms": {
"field": "classNo"
},
"aggs": { // 在這里嵌套新的子聚合
"max_age": {
"max": { // 使用max聚合
"field": "age"
}
}
}
}
}
壓縮存儲(chǔ)算法:
term index fst算法:字母前綴匹配
多個(gè)field倒排索引:bitmaps 按位與運(yùn)算
- Roaring bitmaps
[1,3,4,7,10] [1,0,1,1,0,0,1,0,0,1]
增量編碼壓縮算法:從小到大排列,數(shù)據(jù)增量存儲(chǔ)
監(jiān)控元數(shù)據(jù);
get /index/_search
_settings
_segments
_stats
_flush
_refresh
? _count
? _mapping