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);
}
}
当
我认为您的意思是使用高级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; }
}