gpt4 book ai didi

c# - Elasticsearch-MapperParsingException [格式错误的内容,必须以对象开头]

转载 作者:行者123 更新时间:2023-12-03 01:01:32 25 4
gpt4 key购买 nike

我正在尝试使用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# - Elasticsearch-MapperParsingException [格式错误的内容,必须以对象开头],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36770344/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com