2016-04-21 2 views
0

Я пытаюсь загрузить индексный документ в ES с помощью BulkDescriptor в C#. Я использую V1.7 ES. Ниже мой кусок кода,Elasticsearch - MapperParsingException [Недопустимый контент, должен начинаться с объекта]

public IBulkResponse IndexBulk(string index, string type, List<string> documents) 
     { 

       BulkDescriptor descriptor = new BulkDescriptor(); 
       foreach (var doc in documents) 
       { 
        JObject data = JObject.Parse(documents); 

        descriptor.Index<object>(i => i 
         .Index(index) 
         .Type(type) 
         .Id(data["Id"].toString()) 
         .Document(doc)); 
       } 
       return _Client.Bulk(descriptor); 

     } 

Но это не вставляя документы, когда я проверил ответ я увидел следующее сообщение MapperParsingException[Malformed content, must start with an object]

Пример JSON документ

{ 
"a" : "abc", 
"b": { "c": ["1","2"]} 
} 

Что пошло не так в этом?

+0

Какую версию NEST вы используете? – Rob

+0

HI @Rob, Это v 1.7.1.0 – Backtrack

ответ

2

Проблема здесь заключается в передаче сырого json посредством строго типизированного свободного объема.

Что вы на самом деле отправки elasticsearch является

{"index":{"_index":"test1","_type":"string"}} 
"{"a" : "abc","b": { "c": ["1","2"]}}" 

, который не является правильным.

Мало идей, что вы можете сделать по этому поводу:

  1. использование JObject отправить правильно сериализованный объект elasticsearch

    descriptor.Index<JObject>(i => i 
        .Index(index) 
        .Type(type) 
        .Id(data["Id"].toString()) 
        .Document(JObject.Parse(doc))); 
    
  2. воспользоваться помощью .Raw клиента отправить RAW JSon

    var json = new StringBuilder(); 
    json.AppendLine(@"{""index"":{""_index"":""indexName"",""_type"":""typeName""}}"); 
    json.AppendLine(@"{""a"" : ""abc"",""b"": { ""c"": [""1"",""2""]}}"); 
    
    _Client.Raw.Bulk(json2.ToString()); 
    

Надеюсь, что это поможет.

+0

Да, это сработало для меня. Первоначально я использовал Raw, но, однако, я не уверен, как установить значение _id. Есть ли способ установить _id в RAW. – Backtrack

+0

Это должно работать '' {"" index "": {"" _ index "": "" indexName "", "" type type "": "typeName" "," "_id": "" 1 ""}} ". – Rob

+0

Gem, Работал для меня спасибо – Backtrack

Смежные вопросы