1. 程式人生 > >ElasticSearch入門 - Kibana客戶端常用命令操作curd【RestApi模式】

ElasticSearch入門 - Kibana客戶端常用命令操作curd【RestApi模式】

先來了解什麼是ElasticSearch中的文件??

       ES是面向文件(document oriented)的,這意味著它可以儲存整個物件或文件(document)。然而它不僅僅是儲存,還會索引(index)每個文件的內容使之可以被搜尋。在ES中,你可以對文件(而非成行成列的資料)進行索引、搜尋、排序、過濾。

       ES使用Javascript物件符號(JavaScript Object Notation),也就是JSON,作為文件序列化格式。JSON現在已經被大多語言所支援,而且已經成為NoSQL領域的標準格式。

       ES儲存的一個使用者文件的格式示例:

{
	"id":1,
	"name":"zq",
	"birthday":"1997-01-01",
	"hobby":["音樂","運動"],
	"info":[
		{
			"id":1,
			"name":"z"
		},
		{
			"id":2,
			"name":"q"
		}
	]
}

在ES中將物件轉化為JSON並做索引要比在表結構中做相同的事情簡單的多~ 

 

CRUD:

溫馨小提示:全部命令集合放在文章最後了哦~ 下面是演示效果

1.新增 - ①指定文件id

PUT test/user/1
{
  "id":1,
  "name":"鄭清",
  "age":18
}

②不指定id會預設生成一個【ES內建ID建立】AWgdjWwHtBOnz6xlJ0ha

POST test/user
{
  "id":2,
  "name":"鄭清2",
  "age":20
}

2.獲取 - ①指定ID的文件

GET test/user/1

②獲取指定ID文件的部分欄位

GET test/user/1?_source=name

③只返回文件內容,不要元資料

GET test/user/1/_source

3.刪除

DELETE test/user/1

4.修改 - ①更新整個文件(即先刪除後再新增)

PUT test/user/1
{
  "id":1,
  "name":"鄭清"
}

注意:在響應中,我們可以看到Elasticsearch把 _version  增加了...

②區域性更新 - 覆蓋

POST test/user/1/_update
{
  "doc":
  {
    "id":1,
    "name":"名字被修改了..."
  }
}

5.查詢 - ①查詢1個

GET test/user/1

②查詢所有

GET test/user/_search

GET _search             -->            沒有指定任何的查詢條件,只返回叢集索引中的所有文件 

③批量查詢

GET test/user/_mget
{
  "ids":["1","3"]
}

④高階查詢 - 查詢age為10~18的文件

GET test/user/_search?q=age:[10 TO 18]

⑤高階查詢+排序【asc:升序  desc:降序】

GET test/user/_search?q=age:[10 TO 20]&sort=age:asc

⑥高階查詢+排序+分頁 【from:從第幾頁開始  size:每頁資料條數】

GET test/user/_search?q=age:[10 TO 20]&sort=age:asc&from=0&size=1

⑦高階查詢+排序+分頁+擷取欄位 【_source:擷取name和age欄位】

GET test/user/_search?q=age:[10 TO 20]&sort=age:asc&from=0&size=2&_source=name,age

相當於sql: select name,age from t_user where name like %zq% orderby id desc limit 0,10 



最後附上全部命令:

# 新增 - ①指定文件id
PUT test/user/1
{
  "id":1,
  "name":"鄭清",
  "age":18
}
# 新增 - ②不指定id會預設生成一個【ES內建ID建立】AWgdjWwHtBOnz6xlJ0ha
POST test/user
{
  "id":2,
  "name":"鄭清2",
  "age":20
}

# 獲取 - ①指定ID的文件
GET test/user/1
# 獲取 - ②指定ID文件的部分欄位
GET test/user/1?_source=name
# 獲取 - ③只返回文件內容,不要元資料
GET test/user/1/_source

# 刪除 - 指定文件【ID 或 ES內建建立的ID->AWgdjWwHtBOnz6xlJ0ha】
DELETE test/user/1

# 修改 - ①更新整個文件(即先刪除再新增)
PUT test/user/1
{
  "id":1,
  "name":"鄭清"
}
# 修改 - ②區域性更新->覆蓋
POST test/user/1/_update
{
  "doc":
  {
    "id":1,
    "name":"名字被修改了..."
  }
}

查詢字串:
# ①查詢1個
GET test/user/1
# ②查詢所有
GET test/user/_search
#  沒有指定任何的查詢條件,只返回叢集索引中的所有文件 
GET _search 
# ③批量查詢
GET test/user/_mget
{
  "ids":["1","3"]
}
# ④高階查詢 - 查詢age為10~18的文件
GET test/user/_search?q=age:[10 TO 18]
# ⑤高階查詢+排序【asc:升序  desc:降序】
GET test/user/_search?q=age:[10 TO 20]&sort=age:asc
# ⑥高階查詢+排序+分頁 【from:從第幾頁開始  size:每頁資料條數】
GET test/user/_search?q=age:[10 TO 20]&sort=age:asc&from=0&size=1
# ⑦高階查詢+排序+分頁+擷取欄位 【_source:擷取name和age欄位】
GET test/user/_search?q=age:[10 TO 20]&sort=age:asc&from=0&size=2&_source=name,age
 
【相當於sql: select name,age from t_user where name like %zq% orderby id desc limit 0,10 】