elasticsearch 查詢語句
1关霸、簡(jiǎn)單查詢
url:index/_search
- 不帶參數(shù)、分頁杰扫、排序查詢
json:
{
"size":10
}
- 帶分頁队寇、字段篩選查詢
{
"size":10,
"from":0, //從第幾條開始取,若要做分頁該值則是page*size
"query":{ //字段篩選的必要字段章姓,
"match":{ //查詢的基礎(chǔ)語句英上,與之類似的有 terms 等
"province":"湖南" //字段名
}
},
"sort":{ //排序語句
"created_at":{
"order":"desc"
}
}
}
2炭序、復(fù)雜查詢
*復(fù)雜查詢語句
{
"size": 10,
"from": 0,
"query": {
"bool": {
"must": [
{
"match": {
"city": "長(zhǎng)沙"
}
},
{
"match": {
"province": "湖南"
}
}
]
}
},
"sort": {
"created_at": {
"order": "desc"
}
}
}
ps:當(dāng)你需要多個(gè)條件來進(jìn)行查詢時(shí),這時(shí)可以考慮用復(fù)雜查詢來進(jìn)行苍日,復(fù)雜查詢的語句構(gòu)造
{
"query": {
"bool": {
"must": [
{ // must 復(fù)雜查詢字段,相當(dāng)于mysql中的 AND
"match": {
"fields": "value"
}
},
{
"range": { //范圍查詢窗声,具體 下面會(huì)一一講述
"fields":{
"gte":1,
"lte":2
}
}
}
]
}
}
}
3相恃、聚合統(tǒng)計(jì)
概述
聚合查詢非常適合用于統(tǒng)計(jì)某個(gè)索引中的各項(xiàng)數(shù)據(jù),比如:統(tǒng)計(jì)某天的每個(gè)小時(shí)的用戶量等語句
{
"size": 0,
"query":{ //篩選條件來得到統(tǒng)計(jì)信息
"bool":{
"must":{
"match":{
"uid":60118080791
}
}
}
},
"aggs": {
"result": {
"date_histogram": { //按日期分組
"field": "created_at",
"interval": "2h", // 分組間隔時(shí)間 可以是1h 1day笨觅,具體自己去了解
"format": "yyyy-MM-dd HH:mm:ss" //格式化
},
"aggs":{
"total":{ //結(jié)果字段拦耐,自定義
"terms":{
"field":"uid",
"size":200 //顯示數(shù)量
},
"aggs":{
"max_follower":{ //結(jié)果字段、自定義
"extended_stats":{ //得到的統(tǒng)計(jì)信息见剩,有平均值杀糯、最大值、最小值苍苞、方差
"field":"follower_count"
}
}
}
}
}
}
}
}
4固翰、語句的相應(yīng)字段解釋
- must
must
相當(dāng)于mysql
中的and
語句,比如我要查詢學(xué)生表中性別為男
并且年齡為18
歲的學(xué)生羹呵,語句構(gòu)造如下:
{
"query": {
"bool": {
"must": [
{
"match": {
"gender": 1
}
},
{
"match": {
"age": 18
}
}
]
}
}
}
在以上語句中骂际,如果有多個(gè)條件,則 must
后面需是數(shù)組對(duì)象冈欢,即:must:[{},{}]
- match
match
一般適用于在字段查詢時(shí)歉铝,相當(dāng)于模糊查詢
,如果要查詢的字段設(shè)置了分詞器
凑耻,就會(huì)是模糊查詢
太示,如:我需要查詢簽名中含有操作
的所有用戶,語句構(gòu)造如下:
{
"query": {
"bool": {
"must": [
{
"match": {
"signature": "操作"
}
}
]
}
}
}
上述語句中如果只有一個(gè)條件香浩,建議不使用 bool
結(jié)構(gòu)类缤,可以使用最簡(jiǎn)單 query:{match:{field:""}}
,
與match
類似的結(jié)構(gòu)有 terms
弃衍,該結(jié)構(gòu)主要是用于精確查詢呀非,
- range
range
相當(dāng)于mysql
中的between
,一般用戶范圍查詢镜盯,比如:我要查詢年齡在18至20歲的學(xué)生岸裙,語句構(gòu)造如下:
{
"query": {
"bool": {
"must": [
{
"range": {
"age": {
"gte":18,
"lte":20
}
}
}
]
}
}
}
gte
相當(dāng)于 >
,lte
相當(dāng)于 <