2017-02-15 7 views
2

次のドキュメントがElasticsearchに挿入されると仮定します。フィールドrequest.bodyは内部のオブジェクトおよび/またはフィールドを入れ子になった動的なオブジェクトであることを、私はstringとして全体request.bodyを保存したいと私はElasticsearchがrequest.bodyオブジェクト内のプロパティの新しいフィールドを作成する必要はありませんが与えられダイナミックテンプレート:オブジェクトをプレーンストリングとして保存する

{ 
    "message": "hello", 
    "request": { 
     "body": { 
      "data": "hi", 
      "some_what_dynamic": { 
       "nested": { 
        "not_ending": 10000 
       } 
      } 
     } 
    } 
} 

これを実現するにはどうすればマッピングを定義できますか?ここで

は現在dynamic_templates定義です:

{ 
    "template": "logstash-*", 
    "mappings": { 
     "_default_": { 
      "dynamic_templates": [ 
       { 
        "message_field": { 
         "path_match": "message", 
         "mapping": { 
          "norms": false, 
          "type": "text" 
         }, 
         "match_mapping_type": "string" 
        } 
       }, 
       { 
        "string_fields": { 
         "mapping": { 
          "norms": false, 
          "type": "text", 
          "fields": { 
           "keyword": { 
            "type": "keyword" 
           } 
          } 
         }, 
         "match_mapping_type": "string", 
         "match": "*" 
        } 
       }, 
       { 
        "body_fields": { 
         "match": "body", 
         "mapping": { 
          "norms": false, 
          "type": "text" 
         }, 
         "match_mapping_type": "object" 
        } 
       } 
      ], 
      ... 
     } 
    } 
} 

私は文書を挿入しようとすると、私はメッセージCan't get text on a START_OBJECT at...MapperParsingExceptionを得ました。

答えて

0

私は二重引用符でbody要素のすべてをラップする必要があると思いますか?これのようなものが動作するかもしれません(javascript)?

a={ 
    "message": "hello", 
    "request": { 
     "body": { 
      "data": "hi", 
      "some_what_dynamic": { 
       "nested": { 
        "not_ending": 10000 
       } 
      } 
     } 
    } 
}; 
a.request.body = JSON.stringify(a.request.body); 
関連する問題