Spring data elasticsearch批量索引和删除

问题描述 投票:0回答:2

我是社区新手,所以如果我做错了什么,我深表歉意。

我正在使用 spring data elasticsearch (2.0.4/2.4) 我想进行批量插入和删除。 但ElasticsearchTemplate只包含一个方法bulkInsert

@Override
public void bulkIndex(List<IndexQuery> queries) {
    BulkRequestBuilder bulkRequest = client.prepareBulk();
    for (IndexQuery query : queries) {
        bulkRequest.add(prepareIndex(query));
    }
    BulkResponse bulkResponse = bulkRequest.execute().actionGet();
    if (bulkResponse.hasFailures()) {
        Map<String, String> failedDocuments = new HashMap<String, String>();
        for (BulkItemResponse item : bulkResponse.getItems()) {
            if (item.isFailed())
                failedDocuments.put(item.getId(), item.getFailureMessage());
        }
        throw new ElasticsearchException(
                "Bulk indexing has failures. Use ElasticsearchException.getFailedDocuments() for detailed messages ["
                        + failedDocuments + "]", failedDocuments
        );
    }
}

所以我创建了一个批量方法来处理这两个方法,但我无法访问私有方法prepareIndex。

您是否知道批量索引和删除文档的任何解决方案,或者我应该使用反射来更改prepareIndex方法的可见性 或者有什么简单的方法可以从模型/POJO 创建索引请求?

java spring elasticsearch spring-data-elasticsearch
2个回答
0
投票

不确定您指的是哪个版本

(2.0.4/2.4)

目前无法批量删除。并且在一个请求中不能组合索引/更新等不同操作。

您能否在 Jira 中提交一个问题以添加对批量删除的支持以及在一次调用中执行不同操作的可能性?虽然这不会进入下一个版本,但我担心。


0
投票

这取决于弹性版本。 对于最新版本的elastic,您可以使用“通过查询API删除”

删除与指定查询匹配的文档。

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

© www.soinside.com 2019 - 2024. All rights reserved.