2013-12-08 33 views
5

通過使用GROK filter,我們可以向Logstash添加新字段。爲logstash中的新字段設置Elasticsearch分析器

但是,在這裏,我想知道如何設置該特定領域的分析儀。

對於例如:,我有一個新的ID字段,它有一個像a_b這樣的字段,但Elasticsearch發運的正常分析器會將其分解爲ab。正因爲如此,我無法有效地在特定字段上應用術語功能並使其有用。

在這裏爲ID字段,我想應用我自己的自定義分析器,它不標記值,但應用小寫過濾器。

這是如何在logstash中完成的。

回答

9

在Elasticsearch默認分析儀將標記化使用Standard tokenizer,這將標記化a b術語爲兩個術語:ab,其默認後停止的話令牌濾波器將變成僅僅是單個術語b。請參閱this play一個小例子,其中顯示瞭如何分析文本。

爲了這一點,你所指定的方式進行分析,我們對我們的分析儀配置爲這樣:

"analyzer": { 
    "my_id_analyzer": { 
     "type": "custom", 
     "tokenizer": "keyword", 
     "filters": ["lowercase"] 
    } 
} 

BYT因爲Logstash通常會創建新的索引需要的時候,我們必須確保這種分析儀支持所有索引創建時。有兩種方法可以實現:1)將其添加到Elasticsearch實例配置(elasticsearch.yml),或2)創建包含分析器的索引模板。

由於我們只在特定索引(即帶有前綴logstash-的索引)上需要此分析器。通過使用Index template API,我們可以做到以下幾點:

curl localhost:9200/_template/logstash-id -XPUT -d '{ 
    "template": "logstash-*", 
    "settings" : { 
     "analysis": { 
      "analyzer": { 
       "my_id_analyzer": { 
        "type": "custom", 
        "tokenizer": "keyword", 
        "filters": ["lowercase"] 
       } 
      } 
     } 
    }, 
    "mappings": { 
     "_default_": { 
      "properties" : { 
       "id" : { "type" : "string", "analyzer" : "my_id_analyzer" } 
      } 
     } 
    } 
}' 

在執行上面的命令後,該模板將適用於任何指數與logstash-之後創建的前綴,而唯一的「神奇」的部分是添加映射定義,它使用內置類型_default_,它是給定索引中「any」類型的佔位符。這意味着映射將被添加到任何類型,而不管它的實際類型名稱。

相關問題