天天看點

es指令大全,elasticsearch指令詳解

參考連結

Relational DB Elasticsearch
資料庫(database) 索引(indices)
表(tables) types
行(rows) documents
字段(columns) fields

庫表行字段,index,type,id,fields,  索引類型文檔字段

建立一篇文檔

PUT t1/doc/1     
{
 "name": "小黑的小姨媽",
 "age": 18
}      

index/type/id  id是單個文檔

查詢所有索引

GET _cat/indices?v      

查詢指定的索引資訊

GET t1      

查詢文檔資訊

GET t1/doc/1           #查詢指定文檔
GET t1/doc/_search     #查詢所有文檔
      

删除指定索引

DELETE /t1      

修改文檔

PUT zhifou/doc/1
{
  "name":"顧老二",
  "age":30,
  "from": "gu",
  "desc": "皮膚黑、武器長、性格直",
  "tags": ["黑", "長", "直"]
}

我們要将黑修改成黃:
POST zhifou/doc/1/_update
{
  "doc": {
    "desc": "皮膚很黃,武器很長,性格很直",
    "tags": ["很黃","很長", "很直"]
  }
}      

查詢字元串

方式一:
GET zhifou/doc/_search?q=from:gu
屬性是from,屬性值是gu的文檔

方式二:
GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  }
}      

match條件查詢,查詢含有(比對)指定字段值的文檔

我們檢視來自顧家的都有哪些人

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  }
}      

match查詢全部文檔

查詢

zhifou

索引下的

doc

類型中的所有文檔,那就是查詢全部

GET zhifou/doc/_search
{
  "query": {
    "match_all": {}
  }
}      

match_phrase(短語查詢)

GET t1/doc/_search
{
  "query": {
    "match_phrase": {
      "title": {
        "query": "中國"
      }
    }
  }
}

title字段中包含短語中國
GET t1/doc/_search
{
  "query": {
    "match_phrase": {
      "title": {
        "query": "中國世界",
        "slop": 2
      }
    }
  }
}
slop了。相當于正則中的中國.*?世界。這個間隔預設為0,指定短語間隔      

match_phrase_prefix(最左字首查詢)

GET t3/doc/_search
{
  "query": {
    "match_phrase_prefix": {
      "desc": "bea"
    }
  }
}
desc字段bea開頭字
GET t3/doc/_search
{
  "query": {
    "match_phrase_prefix": {
      "desc": {
        "query": "bea",
        "max_expansions": 1
      }
      
    }
  }
}
max_expansions來設定最大的字首擴充數量      

multi_match(多字段查詢)

方法一:
GET t3/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "beautiful"
          }
        },
        {
          "match": {
            "desc": "beautiful"
          }
        }
      ]
    }
  }
}

方法二:
GET t3/doc/_search
{
  "query": {
    "multi_match": {
      "query": "beautiful",
      "fields": ["title", "desc"]
    }
  }
}

multi_match甚至可以當做match_phrase和match_phrase_prefix使用,隻需要指定type類型即可:
GET t3/doc/_search
{
  "query": {
    "multi_match": {
      "query": "gi",
      "fields": ["title"],
      "type": "phrase_prefix"
    }
  }
}
GET t3/doc/_search
{
  "query": {
    "multi_match": {
      "query": "girl",
      "fields": ["title"],
      "type": "phrase"
    }
  }
}      

term查詢#單個比對項

POST _analyze
{
  "analyzer": "standard",
  "text": "Beautiful girl!"
}
# 結果
["beautiful", "girl"]

GET w10/doc/_search
{
  "query": {
    "term": {
      "t1": "beautiful"
    }
  }
}      

terms查詢#多個比對項

GET w10/doc/_search
{
  "query": {
    "terms": {
      "t1": ["beautiful", "sexy"]
    }
  }
}      

排序查詢:sort#按某個字段降序查詢

查詢顧府都有哪些人,并根據age字段按照降序

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}      

按某個字段升序查詢

GET zhifou/doc/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ]
}      

分頁查詢:from/size#

GET zhifou/doc/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ], 
  "from": 2,
  "size": 1
}

from:從哪開始查
size:傳回幾條結果      

bool查詢

must#(and)并且,滿足多個條件

單個條件查詢:布爾查詢所有from屬性為gu的資料:
GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "from": "gu"
          }
        }
      ]
    }
  }
}
多個條件查詢:想要查詢from為gu,并且age為30的資料
GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "age": 30
          }
        }
      ]
    }
  }
}      

bool查詢should(or),滿足一個就行

查詢隻要是from為gu或者tags為閉月的資料
GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "tags": "閉月"
          }
        }
      ]
    }
  }
}      

bool查詢must_not(not)  既不,也不是

查詢from既不是gu并且tags也不是可愛,還有age不是18的資料
GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "tags": "可愛"
          }
        },
        {
          "match": {
            "age": 18
          }
        }
      ]
    }
  }
}      

bool查詢filter  滿足某個條件,某個字段還可以比較大小範圍

查詢from為gu,age大于25的資料 。比較符号有gt gte lt lte
GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "from": "gu"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gt": 25
          }
        }
      }
    }
  }
}

查詢from是gu,age在25~30之間
GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "from": "gu"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 25,
            "lte": 30
          }
        }
      }
    }
  }
}
must改成should,滿足下面的filter但不滿足上面的match也會顯示出來
GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "from": "sheng"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "lte": 25
          }
        }
      }
    }
  }
}      

bool must filter過濾,過濾一個字段是a,并且另一個字段是b或者c

GET xxx-fsmxx_pm_rawxx_mod_unix_linux_211128/_doc/_search
{
    "query": {
        "bool": {
            "must": [{
                "range": {
                    "DCTIME": {
                        "from": 1,
                        "to": 1738028800000,
                        "include_lower": false,
                        "include_upper": false,
                        "boost": 1.0
                    }
                }
            }],
            "filter": [{
                "terms": {
                    "KPI_NO": ["20200413185034"],
                    "boost": 1.0
                }
            }, {
                "terms": {
                    "KBP": ["6518921118106698111","6038954760944889699"]
                }
            }],
            "adjust_pure_negative": true,
            "boost": 1.0
        }
    },
    "sort": [{
        "DCTIME": {
            "order": "asc",
            "unmapped_type": "long"
        }
    }]
}      
  • must

    :與關系,相當于關系型資料庫中的

    and

  • should

    :或關系,相當于關系型資料庫中的

    or

  • must_not

    :非關系,相當于關系型資料庫中的

    not

  • filter

    :過濾條件。
  • range

    :條件篩選範圍。
  • gt

    :大于,相當于關系型資料庫中的

    >

  • gte

    :大于等于,相當于關系型資料庫中的

    >=

  • lt

    :小于,相當于關系型資料庫中的

    <

  • lte

    :小于等于,相當于關系型資料庫中的

    <=

結果過濾:_source

在所有的結果中,我隻需要檢視name和age兩個屬性,其他的不要
GET zhifou/doc/_search
{
  "query": {
    "match": {
      "name": "顧老二"
    }
  },
  "_source": ["name", "age"]
}      

avg

查詢from是gu的人的平均年齡
GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_avg": {
      "avg": {
        "field": "age"
      }
    }
  },
  "_source": ["name", "age"]
}
首先比對查詢from是gu的資料。在此基礎上做查詢平均值的操作,這裡就用到了聚合函數,其文法被封裝在aggs中,而my_avg則是為查詢結果起個别名,封裝了計算出的平均值。那麼,要以什麼屬性作為條件呢?是age年齡,查年齡的什麼呢?是avg,查平均年齡。

隻想看平均值
GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_avg": {
      "avg": {
        "field": "age"
      }
    }
  },
  "size": 0, 
  "_source": ["name", "age"]
}      

max

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_max": {
      "max": {
        "field": "age"
      }
    }
  },
  "size": 0
}      

min

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_min": {
      "min": {
        "field": "age"
      }
    }
  },
  "size": 0
}      

sum

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_sum": {
      "sum": {
        "field": "age"
      }
    }
  },
  "size": 0
}      

分組查詢和分組聚合

查詢所有人的年齡段,并且按照15~20,20~25,25~30分組,
GET zhifou/doc/_search
{
  "size": 0, 
  "query": {
    "match_all": {}
  },
  "aggs": {
    "age_group": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 15,
            "to": 20
          },
          {
            "from": 20,
            "to": 25
          },
          {
            "from": 25,
            "to": 30
          }
        ]
      }
    }
  }
}

查詢所有人的年齡段,并且按照15~20,20~25,25~30分組,并且算出每組的平均年齡。每個小組内的資料做平均年齡處理。
GET zhifou/doc/_search
{
  "size": 0, 
  "query": {
    "match_all": {}
  },
  "aggs": {
    "age_group": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 15,
            "to": 20
          },
          {
            "from": 20,
            "to": 25
          },
          {
            "from": 25,
            "to": 30
          }
        ]
      },
      "aggs": {
        "my_avg": {
          "avg": {
            "field": "age"
          }
        }
      }
    }
  }
}      

 curl方法檢視es叢集資訊:

現場磁盤空間使用情況查詢
curl -XGET  -u 使用者:密碼 "http://ip:端口/_cat/nodes?v&h=http,version,jdk,disk.total,disk.used,disk.avail,disk.used_percent,heap.current,heap.percent,heap.max,ram.current,ram.percent,ram.max,master"
好像是檢視所有索引分片的吧,反正是一大片輸出:
curl -XGET  -u 使用者:密碼  "http://ip:端口/_cat/shards?v"
檢視叢集狀态:
curl -XGET -u 使用者:密碼  -H "Content-Type: application/json" http://ip:端口/_cat/health?v      

  

下一篇: ss指令詳解