使用空文档ID删除文档 - elasticsearch TCP客户端

时间:2015-12-16 11:18:09

标签: elasticsearch tcp

我正在使用TCP client执行delete操作。 示例代码:

DeleteRequestBuilder builder = client.prepareDelete(indexName, indexType,indexDocumentId);

ListenableActionFuture<DeleteResponse> deleteResponse =   builder.setOperationThreaded(false).execute();

deleteResponse.actionGet(ESTemplateHelper.INDEX_STATE_ACK_TIMEOUT);
deleteStatus = deleteResponse.isDone();

我将空值/“”传递给indexDocumentId

对于空documentId,

deleteStatus始终为true。但文档不会被删除。我错过了什么吗?是不是会引发任何错误?

1 个答案:

答案 0 :(得分:1)

prepareDelete命令用于按ID删除单个文档。有关详细信息:https://www.elastic.co/guide/en/elasticsearch/client/java-api/1.7/delete.html

现在,文档的ID不能为空字符串。所以,应该没有这样的文件。 deleteStatus的原因是正确的,因为它保存了值&#34;请求是否已完成?&#34;而不是&#34;文件已被删除?&#34;。如果您深入了解回复,我相信您会找到:found = false

如果您要传递一个空字符串,希望删除索引indexTypeindexName类型的所有文档,那么prepareDelete不是正确的API。

也许,您可以对您的类型中的所有文档执行查询,并逐个删除它们。查询API也有删除,但它已在1.5中弃用并在2.0中删除,因为它可能会导致OOM错误。更多详情:https://www.elastic.co/guide/en/elasticsearch/reference/1.6/docs-delete-by-query.html

如果你完全不关心这个索引,那么删除索引是最快捷,最干净的方法:https://www.elastic.co/guide/en/elasticsearch/reference/1.7/indices-delete-index.html。我相信你也可以用类似的方式删除你的类型。 例如:curl -XDELETE http://localhost:9200/indexName/indexType