2013-12-08 18 views
5

GROK filterを使用すると、Logstashに新しいフィールドを追加できます。logstashの新しいフィールドの弾性解析アナライザの設定

しかし、ここでは、その特定のフィールドのアナライザーを設定する方法が不思議です。

たとえば:a_bのようなフィールドを持つ新しいIDフィールドがありますが、Elasticsearchが出荷する通常のアナライザーではabに分割されます。このため、その特定のフィールドにフィーチャーという用語を効率的に適用できず、それを有用にすることはできません。

ここでIDフィールドの値をトークン化せず、小文字のフィルタを適用した独自のカスタムアナライザーを適用したいと考えています。

これはどのようにlogstashで行うことができますか。

答えて

9

Elasticsearchのデフォルト・アナライザは、二つの用語にa bをトークン化れる、Standard tokenizerを使用して用語をトークン化します:ab、デフォルトのストップワードの後に​​トークンフィルタは1つだけ用語bに変換されます。テキストの解析方法を示す小さな例については、this playを参照してください。あなたが指定したこの方法を分析するために

、我々のような私たちのアナライザを設定する必要があります。

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

BYT Logstashは、通常は必要なときに、私たちはこのアナライザが利用可能です確認する必要があり、新しいインデックスを作成しますので、すべてのインデックスが作成されます。これを達成するには2つの方法があります: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-で任意のインデックスに適用され、唯一の「魔法」の部分は、追加のマッピングです指定されたインデックスの "any"型のプレースホルダーである組み込み型_default_を使用します。これは、実際の型名にかかわらず、マッピングがどの型にも追加されることを意味します。

関連する問題