關於Elasticsearch與Kibana之間的分詞問題解決方案
阿新 • • 發佈:2019-02-07
在Kibana的展示頁面中,我們點選Table的左側欄,發現Elasticsearch中的資料在展示中是正確的資料,比如:agent中www.baidu.com/test,該介面中會正確的顯示為www.baidu.com/test,但是如果我們將該欄位用Term展示出來的話,就會被分為www.baidu.com和test兩組,通過檢視CURL並沒有發現其有任何問題,最後找到原因為Elasticsearch將其結果分開給了Kibana,所以Kibana會分開展示。
通過研究,我們資料來源為logstash自動收集過來的,索引是自動生成的,我們並不能去修改索引的Mapping將其設定為不分詞,所以我們只能從其源頭下手,當其建立的時候自動設定為不分詞,這時我們就需要配置模板了。
程式碼如下:
{
"template" :"logstash*",
"order" : 0,
"settings" : {
"number_of_shards" : 5
},
"mappings" : {
"fluentd" : {
"properties":{
"request_dir" :{"type":"string","index" :"not_analyzed"},
"http_user_agent" : {"type" : "string","index" :"not_analyzed" }
}
}
}
}
‘
其中重要的是mappings 中的設定,一級一級的按照資料來源正則分解,"index" : "not_analyzed"為不分詞,便於搜尋