Nest (Elasticsearch client for C#) Bulk Index

本文关键字:Bulk Index for Elasticsearch client Nest | 更新日期: 2023-09-27 18:34:04

菜鸟在ElasticSearch和巢在这里。不完全确定我在这里做错了什么,但是这段代码抛出了

"格式错误的操作/元数据行 [1],预期START_OBJECT或END_OBJECT,但找到 [VALUE_NUMBER]"。

我知道 ES 抛出此错误是因为JSON is malformed.我不知道的是为什么 Nest 没有生成正确的 JSON?

注意:我希望能够执行批量索引操作,同时告诉它此有效负载应该转到哪个索引和类型。

public class Test
{
    private static Uri _node;
    private ElasticsearchClient _client;
    static Test()
    {
        _node = new Uri("http://localhost:9200");
    }
    public Test()
    {
        _client = new ElasticsearchClient(new ConnectionSettings(_node));
    }
    public void Bulk<T>(List<T> data, string index, string type) where T : class
    {
        _client.Bulk(index, type, data);
    }
}

Nest (Elasticsearch client for C#) Bulk Index

我认为您的意思是使用高级ElasticClient时,您正在使用低级ElasticsearchClient。根据低级客户端的名称,我假设您使用的是 NEST 1.x,可能是最新版本 1.7.1。请注意,NEST 1.x 仅与 Elasticsearch 1.x 兼容,NEST 2.x 仅与 Elasticsearch 2.x 兼容。

要使用 NEST 1.x 批量索引,使用流畅的 API 指定索引名称和类型名称将如下所示

void Main()
{
    var settings = new ConnectionSettings(new Uri("http://localhost:9200"));
    // use NEST *ElasticClient*
    var client = new ElasticClient(settings, connection: new InMemoryConnection());
    var docs = new List<Doc>
    {
        new Doc(),
        new Doc(),
        new Doc(),
        new Doc(),
        new Doc()
    };
    var indexResponse = client.CreateIndex("docs", c => c
        .AddMapping<Doc>(m => m.MapFromAttributes())
    );
    var bulkResponse = client.Bulk(b => b
        .IndexMany(docs, (d, doc) => d.Document(doc).Index("index-name").Type("type-name"))
    );
}
public class Doc
{
    public Doc()
    {
        Id = Guid.NewGuid();
    }
    public Guid Id { get; set; }
}