大叔問題定位分享(47)kafka執行reassign後部分partition一直is still in progress
快速檢查叢集的健康狀況
GET /_cat/health?v
green:每個索引的primary shard和replica shard都是active狀態的
yellow:每個索引的primary shard都是active狀態的,但是部分replica shard不是active狀態,處於不可用的狀態
red:不是所有索引的primary shard都是active狀態的,部分索引有資料丟失了
索引
直接put資料 PUT index/_doc/1,es會自動生成索引,並建立動態對映dynamic mapping。在生產上,我們需要自己手動建立索引和對映,為了更好地管理索引。就像資料庫的建表語句一樣。
快速檢視叢集中有哪些索引
GET /_cat/indices?v
建立索引:
PUT /demo_index?pretty
#詳細語法
PUT /index
{
"settings": { ... any settings ... },
"mappings": {
"properties" : {
"field1" : { "type" : "text" }
}
},
#索引別名
"aliases": {
"default_index": {}
}
}
查詢索引
GET /my_index/_mapping
GET /my_index/_setting
修改索引
PUT /my_index/_settings
{
"index" : {
#修改副本數
"number_of_replicas" : 2
}
}
刪除索引:
DELETE /demo_index?pretty
#刪除指定索引
DELETE /my_index
#刪除多個索引
DELETE /index_one,index_two
#刪除多個索引
DELETE /index_*
#刪除全部索引
DELETE /_all
為了安全起見,防止惡意刪除索引,刪除時必須指定索引名:
elasticsearch.yml
action.destructive_requires_name: true
新增文件
語法 PUT /index/type/id
PUT /book/_doc/1
{
"name": "Bootstrap開發",
"description": "Bootstrap是由Twitter推出的一個前臺頁面開發css框架,是一個非常流行的開發框架,此框架集成了多種頁面效果。此開發框架包含了大量的CSS、JS程式程式碼,可以幫助開發者(尤其是不擅長css頁面開發的程式人員)輕鬆的實現一個css,不受瀏覽器限制的精美介面css效果。",
"studymodel": "201002",
"price":38.6,
"timestamp":"2019-08-25 19:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
"tags": [ "bootstrap", "dev"]
}
新增文件自動生成ID:
長度為20個字元,URL安全,base64編碼,GUID,分散式生成不衝突
# 語法:POST /index/_doc
POST /test_index/_doc
{
"test_field": "test1"
}
強制新增文件
為防止覆蓋原有資料,我們在新增時,設定為強制建立,不會覆蓋原有文件。如果原文件存在則返回失敗
#語法 PUT /index/ _doc/id/_create
PUT /test_index/_doc/1/_create
{
"test_field": "test"
}
修改覆蓋文件
語法 PUT /index/type/id
:替換操作是整體覆蓋,要帶上所有資訊。
實質:舊文件的內容不會立即刪除,只是標記為deleted。適當的時機,叢集會將這些文件刪除。
PUT /book/_doc/1
{
"name": "Bootstrap開發教程1",
"description": "Bootstrap是由Twitter推出的一個前臺頁面開發css框架",
"studymodel": "201002",
"price":38.6,
"timestamp":"2019-08-25 19:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
"tags": [ "bootstrap", "開發"]
}
修改更新文件
只修改變動欄位
#語法 POST /{index}/type/{id}/_update 或者 POST /{index}/_update/{id}
POST /book/_update/1/
{
"doc": {
"name": " Bootstrap開發教程高階"
}
}
檢索文件
語法:GET /index/type/id
GET /book/_doc/1
檢索文件指定欄位
GET /book/_doc/1?__source_includes=name,price
mget 批量查詢:
GET /_mget
{
"docs" : [
{
"_index" : "test_index",
"_id" : 2
},
{
"_index" : "test_index",
"_id" : 3
}
]
}
#同一索引下批量查詢:
GET /test_index/_mget
{
"docs" : [
{
"_id" : 2
},
{
"_id" : 3
}
]
}
搜尋寫法
post /test_index/_doc/_search
{
"query": {
"ids" : {
"values" : ["1", "7"]
}
}
}
GET /indexname/_search?q=2019 #0條結果
GET /indexname/_search?q=2019-01-01 #1條結果
GET /indexname/_search?q=fieldname:2019-01-01 #1條結果
GET /indexname/_search?q=fieldname:2019 #0 條結果
批量增刪改 bulk
#語法
POST /_bulk
{"action": {"metadata"}}
{"data"}
如下操作,刪除5,新增14,修改2。
POST /_bulk
{ "delete": { "_index": "test_index", "_id": "5" }}
{ "create": { "_index": "test_index", "_id": "14" }}
{ "test_field": "test14" }
{ "update": { "_index": "test_index", "_id": "2"} }
{ "doc" : {"test_field" : "bulk test"} }
對映
查詢索引對映
GET /indexname/_mapping/
查詢所有索引的對映
GET /_mapping
建立對映
建立索引後,應該立即手動建立對映
PUT book/_mapping
{
"properties": {
"name": {
"type": "text"
},
"description": {
"type": "text",
#指定索引分詞器
"analyzer":"english",
#定義搜尋時使用的分詞器
"search_analyzer":"english"
},
"pic":{
"type":"text",
#指定是否索引,預設為index=true,即要進行索引,只有進行索引才可以從索引庫搜尋到。
#但是也有一些內容不需要索引,比如:商品圖片地址只被用來展示圖片,不進行搜尋圖片,此時可以將index設定為false。
"index":false
},
"studymodel":{
"type":"text"
}
}
}
keyword關鍵字欄位
目前已經取代了"index": false。上邊介紹的text文字欄位在對映時要設定分詞器,keyword欄位為關鍵字欄位,通常搜尋keyword是按照整體搜尋,所以建立keyword欄位的索引時是不進行分詞的,比如:郵政編碼、手機號碼、身份證等。keyword欄位通常用於過慮、排序、聚合等。
修改對映
只能建立index時手動建立mapping,或者新增field mapping,但是不能update field mapping。
因為已有資料按照對映早已分詞儲存好。如果修改,那這些存量資料怎麼辦。
刪除對映
通過刪除索引來刪除對映。
模板
建立模板
PUT _template/hhlink_consumer_template
{
"order": 0,
"index_patterns": [
#指定索引匹配規則
"hhlink-consumer-log*"
],
"settings" : {
"index" : {
"mapping" : {
#設定單個索引最大欄位數2000
"total_fields" : {
"limit" : "2000"
}
},
#分片數
"number_of_shards" : "3",
#副本數
"number_of_replicas" : "0"
}
},
#對映
"mappings" : {
"fluentd-aggregator" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"AnalyzedData" : {
"properties" : {
"addr" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
},
"errMsg" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
檢視模板
GET /_template/模板名稱
GET /_template/模板名稱一部分*
GET /_template/模板名稱1,模板名稱2
#檢視全部模板
GET /_template
刪除模板
DELETE /_template/模板名稱
判斷模板是否存在
HEAD /_template/模板名稱
kibana
Kibana---Management--- Create index pattern--- Index pattern填索引名,下一步,再點選discover就可看到資料。
bug
es入庫失敗,報錯Limit of total fields [1000] in index [issue] has been exceeded
es預設索引欄位數限制為1000,超出則入庫失敗,可手動修改限制:
PUT my_index/_settings
{
"index.mapping.total_fields.limit": 2000
}