Elasticsearch從入門到放棄:索引基本使用方法

前文我們提到,Elasticsearch的數(shù)據(jù)都存儲在索引中,也就是說蕾羊,索引相當(dāng)于是MySQL中的數(shù)據(jù)庫。是最基礎(chǔ)的概念帽驯。今天分享的也是關(guān)于索引的一些常用的操作肚豺。

創(chuàng)建索引

curl -X PUT "localhost:9200/jackey?pretty"

ES創(chuàng)建索引使用PUT請求即可,上面是最簡單的新建一個索引的方法界拦,除此之外吸申,你還可以指定:

  • Settings
  • Mappings
  • aliases

索引名稱有以下限制:

  1. 必須是小寫
  2. 不能包含:\,/,*, ?, ", <, >, |, (空格),,, #
  3. 在ES7.0以前索引名可以包含冒號,但是7.0之后不支持了
  4. 不能以-,_+開頭
  5. 不能是...
  6. 長度不能超過255字節(jié)

請求支持的一些參數(shù)有:

  • wait_for_active_shards:繼續(xù)操作前,必須處于active狀態(tài)的分片數(shù)截碴,默認(rèn)是1梳侨,也可以設(shè)置為all或者不大于總分片數(shù)的任意正整數(shù)
  • timeout:設(shè)置等待響應(yīng)的超時時間,默認(rèn)是30秒
  • master_timeout:連接master節(jié)點響應(yīng)的超時時間日丹,默認(rèn)是30秒

前面我們提到創(chuàng)建索引時可以指定三種屬性走哺,這三種屬性都需要放在body中。

aliases

索引的別名哲虾,一個別名可以賦給多個索引丙躏。

給一個index起別名的方式有兩種,一種是創(chuàng)建index時候在body中增加aliases束凑,另一種是通過更新已有索引的方式增加晒旅。

方式一:

curl -X PUT "localhost:9200/jackey?pretty" -H 'Content-Type: application/json' -d'
{
    "aliases" : {
        "alias_1" : {},
        "alias_2" : {
            "filter" : {
                "term" : {"user" : "kimchy" }
            },
            "routing" : "kimchy"
        }
    }
}
'

方式二:

curl -X POST "localhost:9200/_aliases?pretty" -H 'Content-Type: application/json' -d'
{
    "actions" : [
        { "add" : { "index" : "jackey", "alias" : "alias1" } }
    ]
}
'

方式一中,我們還在body中增加了filter和routing汪诉。這主要是用于指定使用別名的條件废恋。指定了filter后,通過alias_2扒寄,只能訪問user為kimchy的document鱼鼓。而routing的值被用來路由,即alias_2只能路由到指定的分片该编。此外還有index_routing和search_routing迄本,它們和routing類似,這里不做過多解釋了课竣。還有一個比較重要的屬性是is_write_index岸梨,這個屬性默認(rèn)是false,如果設(shè)置成true稠氮,表示可以通過這個別名來寫索引,默認(rèn)情況下半开,別名像一個軟鏈接隔披,是不可以修改原索引的。

此外寂拆,還可以使用通配符為多個索引增加相同的別名

curl -X POST "localhost:9200/_aliases?pretty" -H 'Content-Type: application/json' -d'
{
    "actions" : [
        { "add" : { "index" : "test*", "alias" : "all_test_indices" } }
    ]
}
'

除了add奢米,還可以使用remove來刪除別名

curl -X POST "localhost:9200/_aliases?pretty" -H 'Content-Type: application/json' -d'
{
    "actions" : [
        { "remove" : { "index" : "test1", "alias" : "alias1" } }
    ]
}
'

Settings

先看一個例子:

curl -X PUT "localhost:9200/twitter?pretty" -H 'Content-Type: application/json' -d'
{
    "settings" : {
        "index" : {
            "number_of_shards" : 3, 
            "number_of_replicas" : 2 
        }
    }
}
'

索引的setting分為靜態(tài)和動態(tài)兩種。靜態(tài)的只能在索引創(chuàng)建或關(guān)閉時設(shè)置纠永;動態(tài)的則可以使用update-index-settings API來實時設(shè)置鬓长。上面的例子中,number_of_shards屬于靜態(tài)設(shè)置尝江,number_of_replicas屬于動態(tài)設(shè)置涉波。

索引可以設(shè)置的setting可以在官方文檔的Index modules查看,下面我會挑幾個我認(rèn)為比較重要的介紹一下。

先從靜態(tài)開始:

  • index.number_of_shards:指定索引的分片數(shù)啤覆,只能在創(chuàng)建索引時設(shè)置苍日。默認(rèn)是1,最大可以設(shè)置為1024窗声。這是出于安全考慮的一種保護措施相恃。最大值可以通過設(shè)置系統(tǒng)變量來控制export ES_JAVA_OPTS="-Des.index.max_number_of_shards=128"
  • index.routing_partition_size:可以路由的分片數(shù)量,同樣只能在創(chuàng)建索引時指定笨觅,默認(rèn)值為1.這個值必須小于number_of_shards(除非number_of_shards的值也是1)

動態(tài)setting:

  • index.number_of_replicas:每個分片的副本數(shù)拦耐,默認(rèn)是1
  • index.auto_expand_replicas:基于數(shù)據(jù)節(jié)點可以自動擴展的副本數(shù),默認(rèn)為為false见剩∩迸矗可以設(shè)置為一個區(qū)間,以短線分隔炮温,例如「0-5」火脉,也可以設(shè)置成all。需要注意的是柒啤,副本的自動擴展并不會考慮其他的分配規(guī)則倦挂。這有可能導(dǎo)致集群狀態(tài)變成黃色
  • index.search.idle.after:分片被認(rèn)為搜索空閑之前沒有收到請求或搜索的時間。默認(rèn)30秒担巩。
  • index.refresh_interval:刷新操作的執(zhí)行頻率方援,默認(rèn)是1s。如果設(shè)置成-1涛癌,表示不會刷新犯戏。如果沒有顯式設(shè)置,分片在收到搜索請求前至少index.search.idle.after秒內(nèi)不會后臺刷新
  • index.max_result_window:返回結(jié)果的最大數(shù)量拳话,默認(rèn)是10000(一萬)先匪。搜索返回結(jié)果占用的內(nèi)存和時間受到這個值的限制
  • index.routing.rebalance.enable:是否允許分片的自平衡。默認(rèn)是all弃衍,允許所有分片重新平衡呀非。還可以設(shè)置為primaries,只允許主分片重新平衡镜盯。replicas只允許從分片重新平衡岸裙。none不允許分片重新平衡。

除了以上靜態(tài)setting和動態(tài)setting之外速缆,setting中還可以設(shè)置一些其他的值降允,例如分詞器等,這些我們以后再做更詳細的介紹艺糜。

Mappings

curl -X PUT "localhost:9200/test?pretty" -H 'Content-Type: application/json' -d'
{
    "settings" : {
        "number_of_shards" : 1
    },
    "mappings" : {
        "properties" : {
            "field1" : { "type" : "text" }
        }
    }
}
'

Mapping主要用于幫助Elasticsearch理解每個域中數(shù)據(jù)的類型剧董。7.0.0之前mapping的定義通常包括type名稱幢尚。Elasticsearch支持的數(shù)據(jù)類型比較多,其中比較核心的簡單數(shù)據(jù)類型包括:

  • 字符串: text和keyword
  • 整數(shù) : byte, short, integer, long
  • 浮點數(shù): float, double
  • 布爾型: boolean
  • 日期: date

其他的類型送滞,我們以后會做更加詳細的介紹侠草。

刪除索引

刪除索引使用的是DELETE請求。

curl -X DELETE "localhost:9200/jackey?pretty"

你可以在路徑中指定具體索引犁嗅,也可以使用通配符边涕,需要刪除多個索引時,可以使用逗號分隔褂微。如果要刪除全部索引功蜓,可以指定索引為_all或*(不要這么做)。在生產(chǎn)環(huán)境宠蚂,我們通過在elasticsearch.yml文件中將action.destructive_requires_name配置為true來禁止這些危險的操作式撼。

刪除操作支持的參數(shù)有以下幾種:

  • allow_no_indices:如果設(shè)置為true,則通配符或_all匹配不到索引時不會報錯
  • expand_wildcards:控制通配符可以擴展到的索引類型求厕。all:可以擴展到所有的索引著隆。open:只能擴展到打開的索引。closed:只能擴展到關(guān)閉的索引呀癣。none:不接受通配符表達式美浦。默認(rèn)是open
  • ignore_unavailable:如果設(shè)置為true,不存在或關(guān)閉的索引不會在返回中项栏。默認(rèn)是false
  • timeout:指定等待返回響應(yīng)的最長時間浦辨。默認(rèn)是30秒
  • master_timeout:連接master節(jié)點響應(yīng)的超時時間,默認(rèn)是30秒

打開/關(guān)閉索引

前面我們已經(jīng)提到過了打開/關(guān)閉索引沼沈。被關(guān)閉的索引幾乎不能對它進行任何操作流酬,它只是用來保留數(shù)據(jù)的。而打開或關(guān)閉索引通常需要重啟分片來使操作生效列另。具體的操作如下:

curl -X POST "localhost:9200/jackey/_open?pretty"
curl -X POST "localhost:9200/jackey/_close?pretty"

支持的參數(shù)有:

  • allow_no_indices
  • expand_wildcards
  • ignore_unavailable
  • wait_for_active_shards
  • timeout
  • master_timeout

這些參數(shù)在前面都有介紹芽腾。這里就不再贅述了。

拆分索引

隨著數(shù)據(jù)的越來越多页衙,我們可能會有拆分索引的需求摊滔,感謝ES為我們提供了便利。

curl -X POST "localhost:9200/twitter/_split/split-twitter-index?pretty" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "index.number_of_shards": 2
  }
}
'

在拆分索引之前拷姿,要保證索引是只讀狀態(tài),并且集群健康狀態(tài)為green旱函。設(shè)置只讀的方法是:

curl -X PUT "localhost:9200/my_source_index/_settings?pretty" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "index.blocks.write": true 
  }
}
'

拆分索引的具體操作是:

  1. 創(chuàng)建一個和源索引相同的目標(biāo)索引响巢,主分片要大于源索引
  2. 建立從源索引到目標(biāo)索引的硬連接
  3. 創(chuàng)建低級索引后,再對document做Hash操作棒妨。這是為了刪除屬于不同分片的document
  4. 恢復(fù)目標(biāo)索引踪古,就像重新打開關(guān)閉的索引一樣

總結(jié)

關(guān)于索引的使用就先介紹到這里含长。還有很多不完善的地方,以后會繼續(xù)補充伏穆。想要了解更多詳細信息的同學(xué)可以查看官方文檔拘泞。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市枕扫,隨后出現(xiàn)的幾起案子陪腌,更是在濱河造成了極大的恐慌,老刑警劉巖烟瞧,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诗鸭,死亡現(xiàn)場離奇詭異,居然都是意外死亡参滴,警方通過查閱死者的電腦和手機强岸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砾赔,“玉大人蝌箍,你說我怎么就攤上這事”┬模” “怎么了妓盲?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長酷勺。 經(jīng)常有香客問我本橙,道長,這世上最難降的妖魔是什么脆诉? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任甚亭,我火速辦了婚禮,結(jié)果婚禮上击胜,老公的妹妹穿的比我還像新娘亏狰。我一直安慰自己,他們只是感情好偶摔,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布暇唾。 她就那樣靜靜地躺著,像睡著了一般辰斋。 火紅的嫁衣襯著肌膚如雪策州。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天宫仗,我揣著相機與錄音够挂,去河邊找鬼。 笑死藕夫,一個胖子當(dāng)著我的面吹牛孽糖,可吹牛的內(nèi)容都是我干的枯冈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼办悟,長吁一口氣:“原來是場噩夢啊……” “哼尘奏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起病蛉,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤炫加,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后铡恕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琢感,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年探熔,在試婚紗的時候發(fā)現(xiàn)自己被綠了驹针。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡诀艰,死狀恐怖柬甥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情其垄,我是刑警寧澤苛蒲,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站绿满,受9級特大地震影響臂外,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喇颁,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一漏健、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧橘霎,春花似錦蔫浆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至外潜,卻和暖如春原环,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背处窥。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工嘱吗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碧库。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓柜与,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嵌灰。 傳聞我的和親對象是個殘疾皇子弄匕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容