Nest(C#的Elasticsearch客户端)批量索引

时间:2016-02-11 02:08:48

标签: c# json elasticsearch nest

ElasticSearch的Noob和Nest在这里。不完全确定我在这里做错了什么,但这段代码抛出了

  

“格式错误的操作/元数据行[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);
    }
}

1 个答案:

答案 0 :(得分:0)

当我认为您的意思是使用高级别ElasticsearchClient时,您正在使用低级别ElasticClient。根据低级客户端的名称,我假设您使用的是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; }
}