ES(ElasticSearch) 索引創建


此文轉載自:https://my.oschina.net/u/4479011/blog/4755134

環境: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)——關於文檔的信息。三個必須的元數據節點是:

attachments-2020-11-zh6keQ2Q5fc0a08362432.jpg

_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

結果:

attachments-2020-11-Xr9rr03P5fc0a093182fa.png

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

結果:

attachments-2020-11-zpKh7DlK5fc0a0a4dde01.png

可見新建的索引中,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"}}}}

執行完畢后再次執行上面所述查詢結果如下:

attachments-2020-11-Y0jub2Um5fc0a0b7957d8.png

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

結果如下:

attachments-2020-11-QdqAIewW5fc0a0c631f6e.png

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM