1. 程式人生 > >Elasticsearch技術解析與實戰-索引

Elasticsearch技術解析與實戰-索引

htm bulk version 繼續 多文檔 filter case || 重建

1.索引管理

創建索引

PUT http://127.0.0.1:9200/secisland
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "aliases": {},
  "mappings": {
    "doc": {
      "properties": {
        "sign_id": {
          "type": "text",
          "fields": {
            "keyword": {
              "type
": "keyword", "ignore_above": 128 } } }, "pin": { "type": "keyword" }, "app_id": { "type": "keyword" }, "msg_content": { "type": "text" }, "create_time": { "type
": "date", "format": "yyyyMMddHHmmss||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis" }, "mobile_num": { "type": "keyword" }, "expand_num": { "type": "keyword" }, "data_coding": { "type
": "keyword" } } } } }

刪除索引

DELETE http://127.0.0.1:9200/secisland/

獲取索引信息

GET http://127.0.0.1:9200/secisland/

打開、關閉索引

POST http://127.0.0.1:9200/secisland/_open
POST http://127.0.0.1:9200/secisland/_close

可以同時打開或關閉多個索引,全部索引可以使用_all打開或關閉,或者使用通配符表示全部(比如*)。

設置config/elasticsearch.yml 屬性 action.destructive_requires_name 為 true,禁止使用通配符或者_all。

關閉索引會繼續占用磁盤空間。

設置settingscluster.indices.close.enable 為 false ,禁止使用關閉索引功能。

判斷索引是否存在

HEAD http://127.0.0.1:9200/secisland

2.索引映射管理

修改映射

PUT http://127.0.0.1:9200/secisland/_mapping/doc
{
  "properties": {
    "name": {"type": "keyword"}
  }
}

# 可以同時修改多個索引映射,索引名稱支持逗號分隔,_all,通配符*。

獲取映射

GET http://127.0.0.1:9200/secisland/_mapping/doc

獲取字段映射

GET http://127.0.0.1:9200/secisland/_mapping/doc/field/text

格式:

GET host:port/{index}/_mapping/doc/field/{field}

#{index},{field}可以使用逗號分割,也可以使用通配符,其中{index}可以使用_all表示全部索引

3.索引別名

創建別名

格式:PUT /{index}/_alias/{name}
參數:{"routing":"1","filter":{}}

{index} 可以使用*,_all,正則表達式或者逗號分隔
{name} 索引名稱 

PUT http://127.0.0.1:9200/secisland/_alias/user_12
{
  "routing":"12",
  "filter":{
    "term":{"user_id":12}
  }
}

刪除別名

DELETE http://127.0.0.1:9200/secisland/_alias/user_12

查詢別名

GET http://127.0.0.1:9200/secisland/_alias/*
GET http://127.0.0.1:9200/_alias/user_12

判斷別名是否存在

HEAD http://127.0.0.1:9200/secisland/_alias/user_12
HEAD http://127.0.0.1:9200/secisland/_alias/*
HEAD http://127.0.0.1:9200/_alias/user_12
HEAD http://127.0.0.1:9200/_alias/*

4.索引配置

更新索引配置

PUT http://127.0.0.1:9200/secisland/_setting
{
  "index":{"number_of_replicas":4}
}

更新分詞器

添加分析器前,必須先關閉索引,添加後再打開索引。

POST http://127.0.0.1:9200/secisland/_close
PUT http://127.0.0.1:9200/secisland/_settings
{
  "analysis":{
    "analyzer":{
    "content":{"type":"custom","tokenizer":"whitespace"}
    }
  }
}
POST http://127.0.0.1:9200/secisland/_open

獲取配置

GET http://127.0.0.1:9200/secisland/_open

索引分析

包括3個過程:
字符過濾器(character filter)->分詞器(tokenizer)->標記過濾器(token filters)

測試分析器
POST http://127.0.0.1:9200/_analyze
{
  "analyzer":"standard",
  "text":"this is a test"
}

POST http://127.0.0.1:9200/_analyze
{
  "tokenizer":"keyword",
  "token_filters":["lowercase"],
  "char_filters":["html_strip"],
  "text":"detailed output",
  "explain":true
}

索引模板

創建模板,適配te*索引
PUT http://127.0.0.1:9200/_template/template_1
{
  "template":"te*",
  "settings":{},
  "mapping":{}
}

刪除模板
DELETE http://127.0.0.1:9200/_template/template_1

獲取模板
GET http://127.0.0.1:9200/_template/template_1
GET http://127.0.0.1:9200/_template/temp*
GET http://127.0.0.1:9200/_template/template_1,template_2
GET http://127.0.0.1:9200/_template/

判斷索引是否存在
HEAD http://127.0.0.1:9200/_template/template_1

多模板匹配,合並多模板配置,如果配置重復,這是應設置order屬性,0開始,數值低優先級高,優先級相同,後匹配的覆蓋之前的配置。

重建索引

可以指定查詢條件,同時支持通過腳本修改文檔。
POST http://127.0.0.1:9200/_reindex
{
  "size":10000,
  "source":{
    "index":"secisland",
    "query":{
      "match":{"company": "cat"}
    }
  },
  "dest":{"index":"new_secisland", "version_type":"external","routing":"=cat"},
  "script":{
    "internal":"if (ctx._souce.foo == ‘bar‘) {ctx._version++;ctx._source.remove(‘foo‘)}"
  }
}

5.索引監控

索引統計接口

GET http://127.0.0.1:9200/_stats
GET http://127.0.0.1:9200/_stats/indexing
GET http://127.0.0.1:9200/index1,index2/_stats/indexing

統計項:
docs:文檔、刪除文檔(沒有合並的文檔)的數量。受刷新頻率的影響。
store:索引的大小。
indexing:索引統計數據。
get:獲取統計數據,包含缺失統計。
search:搜索統計數據。可以統計不同groups的數據。
completion:完成建議統計數據。
fielddata:字段數據統計數據。
flush:沖洗統計數據。
merge:merge統計數據。
request_cache:分片請求緩存統計數據。
refresh:刷新統計數據。
suggest:建議統計數據
translog:事物日誌統計數據。

索引分片接口

GET http://127.0.0.1:9200/secisland/_segments


索引分片信息:
_3:json文檔的鍵名,代表分片的名稱。用來生成文檔名,所有以分片名開頭的文檔屬於這個分片。
generation:需要寫新的分片時生成的數值,基本是遞增的。分片名從這個數字派生出來。
num_docs:存儲在分片中沒有被刪除的文檔數量。
deleted_docs:存儲在分片中被刪除的數量。
size_in_bytes:分片使用的磁盤空間。
memory_in_bytes:分片占用的內存數量。
committed:分片在磁盤上是否同步。
search:分片是否可以搜索。
version:寫分片的lucene版本。
compound:分片是否存儲在符合文件中。

索引恢復接口

GET http://127.0.0.1:9200/secisland/_recovery

索引恢復輸出字段:
id:分片。
type:恢復類型:存儲、快照、復制、遷移。
stage:恢復階段:初始化(沒有開始)、索引(讀取索引元字段,從源復制到目的地)、開始(啟動恢復;開啟使用的索引)、事物日誌(重做事物日誌)、完成(清理)、結束。
primary:true為主分片;false為從分片。
start_time:恢復開始時間戳。
stop_time:恢復結束時間戳。
total_time_in_millis:恢復時間(毫秒)。
source:恢復原:如果是快照恢復,描述備份倉庫;否則描述源節點。
target:目標節點。
index:物理索引恢復的統計數據。
translog:事物日誌恢復的統計數據。
start:打開和啟動索引的時間統計數據。

索引分片存儲接口

GET http://127.0.0.1:9200/secisland/_shard_stores?status=green

6.狀態管理

清除緩存

GET http://127.0.0.1:9200/secisland/_cache/clear
#可以明確設置query、fielddata、request來清理特定緩存。

索引刷新

POST http://127.0.0.1:9200/secisland/_refresh

沖洗

POST http://127.0.0.1:9200/secisland/_flush
#將數據保存的索引存儲,清除內部事務日誌,釋放內存空間。

合並索引

POST http://127.0.0.1:9200/secisland/_forcemerge

參數:
max_num_segments:用於合並的分片數量。為了充分合並,可以設置值為1。默認執行是簡單的檢查是否需要合並,如果需要則執行合並。
only_expunge_deletes:合並過程是否刪除分片中被刪除的文檔。默認是false。
flush:合並後是否執行沖洗,默認是true。

7.文檔管理

增加文檔

PUT http://127.0.0.1:9200/secisland/doc/1
{
  "a":1
}
  1. 自動創建索引相關:action.auto_create_index=false 禁用自動創建索引。
    index.mapper.dynamic=false 禁用自動映射字段類型。
    自動創建索引可以通過索引模板設置索引,
    action.auto_create_index=+aaa*,-bbb*,+ccc*,(+表示允許,-表示禁止)
  2. 版本號常用在對事物的處理中,操作的時候指定版本號,系統則會對版本號進行檢查。
  3. op_type=create 寫入文檔時,如果文檔存在則會報錯,如果不知道操作類型為create,則會更新數據。
 

更新文檔

PUT http://127.0.0.1:9200/secisland/doc/1/_update
{
  "a":2
}

刪除文檔

DELETE http://127.0.0.1:9200/secisland/doc/1

查詢文檔

GET http://127.0.0.1:9200/secisland/doc/1
多種查詢條件和參數,此處不做詳解。

多文檔操作

POST http://127.0.0.1:9200/_mget
{
  "docs":[
    {"_indes":"secisland", "id":"1"},
    {"_indes":"secisland", "id":"2"}
  ]
}

塊操作

POST http://127.0.0.1:9200/_bulk
{"index":{"_index":"secisland","_id":"10"}}
{"field1":"value1"}
{"index":{"_index":"secisland","_id":"11"}}
{"field1":"value2"}

Elasticsearch技術解析與實戰-索引