ElasticSearch(二)索引管理
目錄
?
索引管理
1、創建索引
2、修改索引
3、刪除索引
4、獲取索引
5、打開和關閉索引
索引映射管理
1、增加映射
不同類型之間的沖突
2、獲取映射
3、獲取字段映射
4、判斷類型是否存在
?
索引別名
別名維護
過濾索引別名
刪除別名
查詢別名
索引配置
更新索引配置
獲取配置
索引分析
索引分析過程:
索引模板
創建索引模板
刪除索引模板
獲取索引模板
多個模板匹配
復制配置
重建索引
索引監控
索引統計
索引分片
索引恢復
索引分片存儲
狀態管理
清除緩存
索引刷新
沖洗(flush)
合并索引
文檔管理
增加文檔
自動創建索引
版本號
操作類型
自動創建id
分片選擇
其他說明
更新刪除文檔
腳本開啟
腳本更新
查詢文檔
多文檔操作
多文檔查詢
索引詞頻率
查詢更新接口
索引管理
1、創建索引
語法:
PUT http://*:*/indexname
{
? ? "settings":{"number_of_shards":3,"number_of_replicas":3}
}
或者
{
? ? "settings":
? ? {
? ? ? ? index:{"number_of_shards":3,"number_of_replicas":3}
? ? }
}
參數:
- nunber_of_shards:分片數量
- number_of_replicas:副本數量
返回值:
{
? ? "acknowledged":true
}
?
創建類型與字段
{
? ? "settings":{"number_of_shards":3,"number_of_replicas":3}
? ? "mappings":
? ? ? ? {
? ? ? ? ? ? "secilog": ?//類型的名稱
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? "properties":
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? "logType": ?//字段的名稱
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "type":"string"? ?//字段的類型是string類型
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ,"index":"not_analyzed"? //字段不進行分析
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? }
}
?
2、修改索引
語法:
PUT http://*:*/indexname/_settings/
{
? ?"number_of_shards":3
}
3、刪除索引
語法:
DELETE http://*:*/indexname
刪除索引可以用逗號分割索引名稱,_all代表所有索引,* 通配符。
可以禁止使用_all或通配符(*),通過action.destructive_requires_name: true 設置。
4、獲取索引
語法:
GET?http://*:*/indexname
或者指定返回的配置部分
GET?http://*:*/indexname/_settings,_mappings,_warmers,_aliases
返回值:
{
? ? "settings":{"number_of_shards":3,"number_of_replicas":3},
? ? "mapping":
? ? ? ? {
? ? ? ? ? ? "secilog": ?//類型的名稱
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? "properties":
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? "logType": ?//字段的名稱
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "type":"string" ? 字段的類型是string類型
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ,"index":"not_analyzed" ?字段不進行分析
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? },
? ? "aliases":{},
? ? "warmers":{}
}
//不存在,返回錯誤內容:
{ "error":........}
5、打開和關閉索引
語法:
POST?http://*:*/indexname/_close? ? //indexname 可以為一個或多個
POST?http://*:*/indexname/_open
?
索引映射管理
1、增加映射
語法:
PUT http://*:*/{indexname}/_mapping/{type}
{body}
- indexname:為索引的名稱,可以指定多個,或者用通配符
- type:為文檔類型
- body:為文檔類型的字段。
一般對現有字段不會更新。例外:
- 新的屬性被添加到 對象類型 的字段
- 新的多域字段 添加到現有字段
- doc_values可以被禁用
- 增加了ignore_above參數
?
eg:
PUT http://*:*/indexname
{
? ? "mappings":
? ? ? ? {
? ? ? ? ? ? "secilog": ?//類型的名稱
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? "properties":
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? "logType": ?//字段的名稱
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "type":"string" ? 字段的類型是string類型
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ,"index":"not_analyzed" ?字段不進行分析
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? }
}
或者
PUT http://*:*/indexname/_mapping/secilog
{
? ? "properties":
? ? {
? ? ? ? "logType": ?//字段的名稱
? ? ? ? ? ? {
? ? ? ? ? ? ? ? "type":"string" ? 字段的類型是string類型
? ? ? ? ? ? ? ? ,"index":"not_analyzed" ?字段不進行分析
? ? ? ? ? ? }
? ? }
}
//以上增加文檔類型:secilog。如果文檔類型已存在,則修改或者新增字段。
不同類型之間的沖突
同一索引的不同類型中,相同名稱必須有相同映射。
{
? ? "mapping":
? ? ? ? {
? ? ? ? ? ? "type_one": ?//類型的名稱
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? "properties":
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? "logType": ?//字段的名稱
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "type":"string" ? 字段的類型是string類型
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ,"index":"not_analyzed" ?字段不進行分析
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? "type_two": ?//類型的名稱
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? "properties":
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? "logType": ?//字段的名稱
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "type":"string" ? 字段的類型是string類型
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ,"index":"not_analyzed" ?字段不進行分析
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? }
}
以上示例,2個logType字段必須配置相同,如果只更新一個會拋出異常,可以通過添加? ?update_all_types 更新所有類型。
2、獲取映射
語法:
GET?http://*:*/{indexname}/_mapping/{type}
3、獲取字段映射
語法:
GET?http://*:*/{indexname}/_mapping/{type}/field/{field}
4、判斷類型是否存在
語法:
HEAD?http://*:*/{indexname}/{type}
返回200 或者 404
?
索引別名
ES可以對索引指定別名,別名不能重復,也不能與索引重名。別名相當于關系數據庫中的視圖。
別名維護
POST?http://*:*/_aliases
{
? ? "actions":
? ? [
? ? {"add":{"index":"index_name","alias":"alias_name"}}
? ? ,{"remove":{"index":"index_name","alias":"alias_name"}}
? ? ]
}
一個別名可以對應多個索引。
過濾索引別名
{"add":{"index":"index_name","alias":"alias_name"
"filter":{"term": {"user":"jim"} }
"routing":"1",
"search_routing":"1,2",? ?//搜索路由可以指定多個值,
"index_routing":"1",? ? //索引路由只能指定1個值。
?
}}
刪除別名
DELETE?http://*:*/{index}/_alias/{aliasname}
查詢別名
GET?http://*:*/{index}/_alias/{aliasname}
HEAD?http://*:*/{index}/_alias/{aliasname}
索引配置
更新索引配置
PUT?http://*:*/{index}/_settings
PUT?http://*:*/_settings
獲取配置
GET?http://*:*/{index}/_settings
索引分析
索引分析過程:
1、文本塊拆分為詞
2、標準化詞
這些過程由分析器(analysers)完成。
一個分析器是一個組合,用于將3個功能放在一起
- 字符過濾器
字符串經過字符過濾器(character filter)處理,去掉一些無意義的字符,例如HMTL標記。
- 分詞器(tokenizer)
分詞器標記一個個獨立的詞,例如通過空格,標點等分割
- 標記過濾器
每個詞都通過所有標記過濾(token filter)處理。它可以修改詞(大小寫轉換),去掉詞(a,an等),增加詞(同義詞)
測試分析器:
POST?http://*:*/_analyze
{
? ? "analyzer":"standard",
? ? "text":"this is a text"
}
tokenizer: keyword,
token_filters: ["lowercase",...]
char_filters:["html_script",...]
explain:true
指定索引進行分詞:
POST?http://*:*/{index}/_analyze
索引模板
索引模板是索引創建的模板,指定了settings和mappings。在創建索引時指定模板名,就可以把模板信息應用到索引。
創建索引模板
POST?http://*:*/_template/{template_name}
{
? ? "template":"te*",
? ? "settings":{}
? ? "mappings":{}
}
刪除索引模板
DELETE?http://*:*/_template/{template_name}
獲取索引模板
GET?http://*:*/_template/{template_name}
//支持通配符,逗號
多個模板匹配
通過通配符匹配多個模板,會合并模板配置,相同項是通過order確定,從0 開始,order值大的優先級高
復制配置
重建索引
索引監控
索引統計
GET?http://*:*/_stats
GET?http://*:*/{index}/_stats
統計數據選項:
GET?http://*:*/_stats/options
GET?http://*:*/_stats/merge,refresh
選項:
。。。。。。
索引分片
提供索引的分片信息
GET?http://*:*/{indexname}/_segments
索引恢復
索引恢復提供正在進行恢復的索引分片信息
GET?http://*:*/{indexname}/_reconvery
索引分片存儲
提供索引分片副本的存儲信息
GET?http://*:*/{indexname}/_shard_stores
狀態管理
清除緩存
清除緩存可以清除管理一個或多個索引的緩存,或者特定的緩存。
POST?http://*:*/{indexname}/_cache/clear
接口默認清理所有緩存,可以明確確定query,fielddata,request,fields來清理特定緩存
索引刷新
使之前的最后一次刷新后的所有操作執行。
POST?http://*:*/{indexname}/_refresh
POST?http://*:*/_refresh
沖洗(flush)
沖洗用于把索引的數據寫入存儲并且清除內部事務日志,用于釋放索引的內存空間。
POST?http://*:*/{indexname}/_flush
合并索引
強制合并一個或多個索引,合并分片數量和每個分片保存的Lucene索引。
POST?http://*:*/{indexname}/_forcemerge
POST?http://*:*/_forcemerge
文檔管理
增加文檔
POST?http://*:*/{indexname}/{type}/{id}
{body}
自動創建索引
默認會自動創建索引
版本號
每個文檔都有一個版本號,版本號信息放在返回字段_version中,主要用于并發事務處理。
操作類型
可以強制指定操作類型,op_create,只有不存在時才會執行成功。
自動創建id
不指定id時會自動創建。
分片選擇
默認分片是通過id的散列值,可以通過routing=xx來指定分片的選擇
其他說明
分布式:索引操作主要針對主節點的分片操作,操作后分發副本。
一致性:
刷新:可以在操作時指定refresh=true,強制刷新所有副本,已做優化,不會影響性能。
空操作:文檔沒有任何變更,會變更版本號,可以指定detect_noop=true 防止。
超時:默認超時1分鐘,timeout設置超時時間。
更新刪除文檔
允許通過腳本操作文檔
腳本開啟
默認關閉,安全考慮。設置開啟參數,需要重啟ES
開啟參數:
script.inline:on
script.indexed:on
script.file:on
腳本更新
POST?http://*:*/{indexname}/{type}/{id}/_update
{
? "script":
{"inline":? ""
,"params":{}
}
}
查詢文檔
GET?http://*:*/{indexname}/{type}/{id}/
#只獲取內容
GET?http://*:*/{indexname}/{type}/{id}/_source
#分片選擇
GET?http://*:*/{indexname}/{type}/{id}?routing=
多文檔操作
多文檔查詢
POST?http://*:*/_mget
{
? ? "docs":
? ? [
? ? ? ? {"_index":"","_type":"","_id":""}
? ? ? ? ,......
? ? ]
}
?
索引詞頻率
查詢更新接口
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的ElasticSearch(二)索引管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ElasticSearch(一)基础知识
- 下一篇: mongodb语法与spring实现