2017-08-25 8 views
0

私は、LogstashのソースとしてTMXファイル(翻訳データ用のXMLファイル)を使用してElasticsearchのデータをインデックスしています。ログスタッシュでtmxファイル(翻訳データのXMLファイル)を解析するには

サンプルTMXファイルには、私はここで行うに必要なもの

<?xml version="1.0" encoding="UTF-8"?> 
<tmx version="1.4"> 
    <header creationtool="ModernMT - modernmt.eu" creationtoolversion="1.0" datatype="plaintext" o-tmf="ModernMT" segtype="sentence" adminlang="en-us" srclang="en-GB"/> 
    <body> 
    <tu srclang="en-GB" datatype="plaintext" creationdate="20121019T114713Z"> 
    <tuv xml:lang="en-GB"> 
    <seg>The purpose of the standard is to establish and define the requirements for the provision of quality services by translation service providers.</seg> 
    </tuv> 
    <tuv xml:lang="it"> 
    <seg>L'obiettivo dello standard è stabilire e definire i requisiti affinché i fornitori di servizi di traduzione garantiscano servizi di qualità.</seg> 
    </tuv> 
</tu> 
<tu srclang="en-GB" datatype="plaintext" creationdate="20111223T112746Z"> 
    <tuv xml:lang="en-GB"> 
    <seg>With 1,800 experienced and qualified resources translating regularly into over 200 language combinations, you can count on us for high quality professional translation services.</seg> 
    </tuv> 
    <tuv xml:lang="it"> 
    <seg>Abbiamo 1.800 professionisti esperti e qualificati che traducono regolarmente in oltre 200 combinazioni linguistiche; perciò, se cercate la qualità, potete contare su di noi.</seg> 
    </tuv> 
</tu> 
<tu srclang="en-GB" datatype="plaintext" creationdate="20111223T112746Z"> 
    <tuv xml:lang="en-GB"> 
    <seg>Access our section of useful links</seg> 
    </tuv> 
    <tuv xml:lang="it"> 
    <seg>Da qui potrete accedere a una sezione che propone link a siti che possono essere di vostro interesse</seg> 
    </tuv> 
</tu> 

は2つの<tuv>ブロックが内部のデータフィールドとして使用される場合、各<tu>ブロックにアクセスすることで、このようになります。最初のtuvブロックに格納されたデータは、ソース言語データフィールドとしてESにインデックスされ、2番目のtuvブロックに格納されたデータは、ターゲット言語データフィールドになります。

TMXドキュメントには、tuvブロックを10000個以上含むことができます。

私は、XMLフィルタを使用してトラブルを抱えていますし、それは次のようになり、ここで

input { 
    file { 
     path => "/en-gb_pt-pt/81384/81384.xml" 
      start_position => "beginning" 
     codec => multiline { 
       pattern => "<tu>" 
        negate => "true" 
        what => "previous" 
     } 
    } 
} 

filter { 
    xml { 
     source => "message" 
      target => "xml_content" 
      xpath => [ "//seg", "seg" ] 
    } 
} 

output { 
    stdout { 
      #codec => json 
      codec => rubydebug 
    } 
} 

は私のインデックス・テンプレートの一部であり、

"segment": { 
      "_parent": { 
       "type": "tm" 
      }, 
      "_routing": { 
       "required": "true" 
      }, 
      "properties": { 
       "@timestamp": { 
        "type": "date", 
        "format": "strict_date_optional_time||epoch_millis" 
       }, 
       "@version": { 
        "type": "string" 
       }, 
       "source": { 
        "type": "string", 
        "store": "true", 
        "fields": { 
         "length": { 
          "type":  "token_count", 
          "analyzer": "standard" 
         } 
        } 
       }, 
       "target": { 
        "type": "string", 
        "store": "true", 
        "fields": { 
         "length": { 
          "type":  "token_count", 
          "analyzer": "standard" 
         } 
        } 
       } 
      } 
     } 

答えて

1

Ì'dは単純なアプローチを提案し、 grokまたは解剖フィルターを使用して。

filter { 
    dissect { 
     mapping => { "message" => "%{}<seg>%{src}</seg>%{}<seg>%{trg}</seg>%{}" } 
    } 
    mutate { 
     remove_field => ["message"] 
    } 
} 

そして、あなたが得る:

{ 
      "path" => "/en-gb_pt-pt/81384/81384.xml", 
    "@timestamp" => 2017-08-25T15:07:34.567Z, 
      "src" => "The purpose of the standard is to establish and define the requirements for the provision of quality services by translation service providers.", 
     "@version" => "1", 
      "host" => "my_host", 
      "trg" => "L'obiettivo dello standard è stabilire e definire i requisiti affinché i fornitori di servizi di traduzione garantiscano servizi di qualità.", 
      "tags" => [ 
     [0] "multiline" 
    ] 
} 
関連する問題