ES建立索引、投放文件過程
阿新 • • 發佈:2019-02-08
因為之前對ES並不是太熟悉,實際工作時,在ElasticSearch和Kibanan的使用過程中,出現了好多棘手的狀況,修修補補,對於在ES上建立索引到插入文件,搜尋、查詢文件的整個流程,大概有了規範化的執行模式,以下是在本人總結的大致從建立到插入的流程,以及其中注意的一些細節。 以ES整合Kibanan為例:第一步:建立索引 在Kibanan的Dev Tools網路介面中輸入命令建立索引(其他建立索引方式,如Java API、CURL均可)Kibanan中命令為 :PUT 索引名第二步:建立mapping對映,設定分詞 這一步還是很關鍵的,之前使用的時候沒有建立對映、設定分詞,導致後面使用term精確匹配的時候,“2018-05”這樣的欄位始終無法命中,因為如果沒有任何的相關設定,ES是預設分詞的,會把“2018-05”拆分成“2018”和“05”,而無法匹配”2018-05“了。建立各個欄位的對映的時候注意型別,否則後面JSON傳入文件的時候可能型別不匹配而無法插入文件。 同樣,在Kibanan的Dev Tools中,輸入如下格式命令為欄位對映type和設定分詞
另外,在實際的使用過程中生成報表、視覺化或者聚合資料的時候可能會遇到Fielddata is disabled on text fields by default. Set fielddata=true on [state] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory 這個異常是因為在ES的5以後版本中,對排序、聚合所使用的欄位使用單獨的資料結構 fielddata, fielddata是快取到記憶體中的,為了節省空間,在text型別的欄位上是預設禁用 fielddata的,如果需要單獨開啟,可以命令設定
如上,info為該索引的type型別,log_time、completion_time、city_id、untax_amount為該索引包含的欄位,上面的對映中,我們為每一個欄位設定了資料型別type,"index":"not_analyzed"為設定該欄位不分詞,匯入文件前一定要設定好。設定成功Kibanan會返回acknowledge:true,提示設定成功。後面,我們就可以新增文件了。PUT /index_test_name/info/_mapping { "info":{ "properties":{ "log_time":{"type":"string","index":"not_analyzed"}, "completion_time":{"type":"string","index":"not_analyzed"}, "city_id":{"type":"string","index":"not_analyzed"}, "untax_amount":{"type":"double","index":"not_analyzed"} }} }
另外,在實際的使用過程中生成報表、視覺化或者聚合資料的時候可能會遇到Fielddata is disabled on text fields by default. Set fielddata=true on [state] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory
PUT index_test_name/_mapping/info
{
"properties":{
"log_time":{
"type":"text",
"fielddata":true
}
}
}
這樣,就為index_test_name索引的log_time欄位開啟了fielddata,問題就可以解決了。