環境:ES 6.2.2
os:Centos 7
kibana:6.2.2
介紹
- 索引是ElasticSearch存放數據的地方,可以理解為關系型數據庫中的一個數據庫。事實上,我們的數據被存儲和索引在分片(shards)中,索引只是一個把一個或多個分片分組在一起的邏輯空間。然而,這只是一些內部細節——我們的程序完全不用關心分片。對於我們的程序而言,文檔存儲在索引(index)中。剩下的細節由Elasticsearch關心既可。(索引的名字必須是全部小寫,不能以下划線開頭,不能包含逗號)
- 類型用於區分同一個索引下不同的數據類型,相當於關系型數據庫中的表。在Elasticsearch中,我們使用相同類型(type)的文檔表示相同的“事物”,因為他們的數據結構也是相同的。每個類型(type)都有自己的映射(mapping)或者結構定義,就像傳統數據庫表中的列一樣。所有類型下的文檔被存儲在同一個索引下,但是類型的映射(mapping)會告訴Elasticsearch不同的文檔如何被索引。
- 文檔是ElasticSearch中存儲的實體,類比關系型數據庫,每個文檔相當於數據庫表中的一行數據。在Elasticsearch中,文檔(document)這個術語有着特殊含義。它特指最頂層結構或者根對象(root object)序列化成的JSON數據(以唯一ID標識並存儲於Elasticsearch中)。
- 文檔由字段組成,相當於關系數據庫中列的屬性,不同的是ES的不同文檔可以具有不同的字段集合。對比關系型數據庫:
文檔元數據
一個文檔不只有數據。它還包含了元數據(metadata)——關於文檔的信息。三個必須的元數據節點是:
_index:索引
_type:類型
_id:id僅僅是一個字符串,它與_index和_type組合時,就可以在Elasticsearch中唯一標識一個文檔。當創建一個文檔,你可以自定義_id,也可以讓Elasticsearch幫你自動生成。
索引創建原則
類似的數據放在一個索引,非類似的數據放不同索引:product index(包含了所有的商品),sales index(包含了所有的商品銷售數據),inventory index(包含了所有庫存相關的數據)。如果你把比如product,sales,human resource(employee),全都放在一個大的index里面,比如說company index,不合適的。
index中包含了很多類似的document:類似是什么意思,其實指的就是說,這些document的fields很大一部分是相同的,你說你放了3個document,每個document的fields都完全不一樣,這就不是類似了,就不太適合放到一個index里面去了。
索引名稱必須是小寫的,不能用下划線開頭,不能包含逗號:product,website,blog
1、創建新的索引(index)
PUT indexTest001
結果:
2、索引設置
ES 默認提供了好多索引配置選項,參考https://www.elastic.co/guide/...,這些配置選項都有經過優化的默認配置值,除非你非常清楚這些配置的作用以及知道為什么去修改它,不然使用其默認值即可。
a、分片設置
number_of_shards
每個索引的主分片數,默認值是 5 。這個配置在索引創建后不能修改。
number_of_replicas
每個主分片的副本數,默認值是 1 。對於活動的索引庫,這個配置可以隨時修改。
例如,我們可以創建只有 一個主分片,沒有副本的小索引:
PUT /my_test_index_004
{ "settings": { "number_of_shards" : 1, "number_of_replicas" : 0 } }
更改副本數量:
PUT /my_test_index_004/_settings
{ "number_of_replicas": 2 }
每次更改分片之后可以使用:GET my_test_index_004/_search_shards 來查詢索引信息.
3、創建mapping
a、首先查看剛剛創建的索引的mapping是什么樣子的
GET indextest001/_mapping
結果:
可見新建的索引中,mapping是一個空集,所以我們就要創建這個index的mapping
命令:
POST indextest001/product/_mapping?pretty {"product":{"properties":{"title":{"type":"text","store":"true"},"description":{"type":"text","index":"false"},"price":{"type":"double"},"onSale":{"type":"boolean"},"type":{"type":"integer"},"createDate":{"type":"date"}}}}
執行完畢后再次執行上面所述查詢結果如下:
4、插入數據
POST indextest001/product
{ "title": "test title 001", "description": "this is a random desc ", "price": 22.6, "onSale": "true", "type": 2, "createDate": "2018-01-12" }
然后查詢一下所有數據,默認為match_all
GET indextest001/product/
根據id查詢
GET indextest001/product/UNBdGWIBI2NcsxokJ0lQ
結果如下: