小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ElasticSearch排序引起的all shards failed異常原因分析

 小牛學(xué)堂666 2018-09-12

背景

注:ElasticSearch版本為5.4。

在我們的日志系統(tǒng)里需要一些系統(tǒng)索引,這些系統(tǒng)索引在應(yīng)用初始化的時候就會被添加到ElasticSearch中去,這些在ElasticSearch中的系統(tǒng)索引在沒有索引數(shù)據(jù)的時候,只有索引名和一些配置信息,沒有mapping信息。當(dāng)用戶去根據(jù)時間區(qū)間排序搜索日志信息的時候,ElasticSearch就會產(chǎn)生all shards failed異常。具體異常信息如下:


查看了.alert的索引數(shù)據(jù)再結(jié)合ElasticSearch的異常信息判斷,我懷疑是由于.alert系統(tǒng)索引沒有timestamp mapping信息引起的,.alert索引初始化沒有任何數(shù)據(jù)時,ElasticSearch中的信息如下:

http://dev:9200/.alert


看到這些信息之后,我開始了用以下方法嘗試解決。

解決方法

以下方法1和方法2都以失敗而告終,只有方法3可以成功解決該問題。但在解決問題中我查找了很多資料,讓我對ElasticSearch的mapping有了更深地理解,因此我將解決該問題的過程記錄了下來。

方法1:添加索引模板

首先,由于是沒有timestamp這個mapping信息,因此我想到創(chuàng)建索引模板,將.alert這個索引的mappings信息用模板來設(shè)置,以便在索引創(chuàng)建的時候就有相應(yīng)的mapping信息。模板信息如下:


但是,經(jīng)過測試后發(fā)現(xiàn),all shards failed的問題還是會產(chǎn)生。究其原因是由于:

索引模板只會在插入新索引數(shù)據(jù)的時候生效,如果沒有索引數(shù)據(jù),索引模板定義的mappings信息不會生效,而且對模板的改變不會影響到已存在的索引。

此時,.alert這個索引為空,還沒有新數(shù)據(jù)插入,因此,模板不會生效,也就致使該方法不會解決all shards failed的問題。

方法2:創(chuàng)建索引時添加mapping

由于ElasticSearch允許在創(chuàng)建索引時就創(chuàng)建mapping信息,于是我想到了這個方法,經(jīng)過測試后,可以解決all shards failed的問題。但是,產(chǎn)生了一個嚴(yán)重的后果,我們用.alert索引來記錄服務(wù)器報警信息,當(dāng)我往.alert這個索引里添加數(shù)據(jù)時,只有timestamp這個字段的數(shù)據(jù)添加進去了,其他數(shù)據(jù)像產(chǎn)生報警的主機、報警內(nèi)容等信息添加失敗。

查詢官方文檔發(fā)現(xiàn):

mapping信息一旦被創(chuàng)建,就不允許被修改。改變已有的mapping就意味著使已經(jīng)存在的索引數(shù)據(jù)無效,解決的辦法就是使用正確的mappings信息來創(chuàng)建新的索引,然后重新把數(shù)據(jù)添加到新索引中。雖然官方提供了reindex方法來解決這個問題,但是,在大數(shù)據(jù)量的情況下,reindex代價比較高,因此,創(chuàng)建索引時添加mapping這個方法也行不通。

方法3:給排序條件加unmapped_type

ElasticSearch的search api可以設(shè)置排序時忽略字段的哪些映射。默認情況下,如果沒有與排序字段關(guān)聯(lián)的映射,則搜索請求將失敗。unmapped_type選項允許設(shè)置忽略沒有映射的字段,從而不對該字段排序。由于timestamp的mapping為date類型,因此,在搜索排序條件中增加{"timestamp":{"unmapped_type":"date"}}成功解決由于排序字段沒有date映射引起的all shards failed問題。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多