Elasticsearch - MapperParsingException [格式错误的内容,必须以对象开头]
Elasticsearch - MapperParsingException[Malformed content, must start with an object]
我正在尝试使用 C# 中的 BulkDescriptor 将索引文档批量导入 ES。我正在使用 V1.7 ES。以下是我的一段代码,
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"]}
}
哪里出了问题?
这里的问题是通过强类型的流畅批量方法传递原始 json。
你实际发送给elasticsearch的是
{"index":{"_index":"test1","_type":"string"}}
"{"a" : "abc","b": { "c": ["1","2"]}}"
这是不正确的。
关于您可以做些什么的一些想法:
使用JObject
将正确序列化的对象发送到elasticsearch
descriptor.Index<JObject>(i => i
.Index(index)
.Type(type)
.Id(data["Id"].toString())
.Document(JObject.Parse(doc)));
利用 .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());
希望对您有所帮助。
我正在尝试使用 C# 中的 BulkDescriptor 将索引文档批量导入 ES。我正在使用 V1.7 ES。以下是我的一段代码,
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"]}
}
哪里出了问题?
这里的问题是通过强类型的流畅批量方法传递原始 json。
你实际发送给elasticsearch的是
{"index":{"_index":"test1","_type":"string"}}
"{"a" : "abc","b": { "c": ["1","2"]}}"
这是不正确的。
关于您可以做些什么的一些想法:
使用
JObject
将正确序列化的对象发送到elasticsearchdescriptor.Index<JObject>(i => i .Index(index) .Type(type) .Id(data["Id"].toString()) .Document(JObject.Parse(doc)));
利用
.Raw
客户端发送原始 jsonvar json = new StringBuilder(); json.AppendLine(@"{""index"":{""_index"":""indexName"",""_type"":""typeName""}}"); json.AppendLine(@"{""a"" : ""abc"",""b"": { ""c"": [""1"",""2""]}}"); _Client.Raw.Bulk(json2.ToString());
希望对您有所帮助。