我有多个具有不同索引名的文档,批量保存在elasticsearch中:
public void bulkCreateOrUpdate(List personUpdateList, List addressUpdateList, List positionUpdateList) {
this.operations.bulkUpdate(personUpdateList,Person.class);
this.operations.bulkUpdate(addressUpdateList, Address.class);
this.operations.bulkUpdate(positionUpdateList, Position.class);
}但是,是否仍然可以通过只调用一行,保存多个不同索引类型的列表来进行优化?
发布于 2022-11-15 10:32:55
Tldr;
当然,散装api允许这样做。
这是一个有效的呼叫
POST _bulk
{"index":{"_index":"index_1"}}
{"data":"data"}
{"index":{"_index":"index_2"}}
{"data":"data"}你的Java客户怎么处理它..。我不确定。
解决方案
可以这样做:
BulkRequest.Builder br = new BulkRequest.Builder();
br.operations(op -> op
.index(idx -> idx
.index("index_1")
.id("1")
.document(document)
)
);
br.operations(op -> op
.index(idx -> idx
.index("index_2")
.id("1")
.document(document)
)
);可以这样做:
BulkRequest request = new BulkRequest();
request.add(new IndexRequest("index_1").id("1")
.source(XContentType.JSON,"data", "data"));
request.add(new IndexRequest("index_2").id("1")
.source(XContentType.JSON,"data", "data"));发布于 2022-11-15 19:58:52
对于:
ElasticsearchOperations.bulkXXX()方法以一个List<IndexQuery>作为第一个参数。可以在每个对象上设置索引名,以指定应在哪个索引中写入/更新数据。使用从最后一个参数(实体类或IndexCoordinates对象)获取的索引名,以防在IndexQuery中没有设置索引名。
https://stackoverflow.com/questions/74444019
复制相似问题