从Java设置生存时间(TTL) - 请求样本

时间:2014-02-27 08:38:13

标签: elasticsearch elasticsearch-bulk-api

修改 This is basically what I want to do, only in Java

使用ElasticSearch,我们将文档添加到绕过IndexRequest项目的索引到BulkRequestBuilder。

我希望在一段时间过后(生存时间/ ttl)从索引中删除文档

可以通过设置索引的默认值或基于每个文档来完成此操作。 我这两种方法都没问题

以下代码是尝试按文档执行此操作。这是行不通的。我认为这是因为没有为索引启用TTL。 要么告诉我需要添加哪些Java代码来启用TTL,以便下面的代码可以工作,或者显示不同的代码,使TTL +为Java中的索引设置默认TTL值我知道{{3}但是如果可能的话,我需要从Java代码中完成它。

    logger.debug("Indexing record ({}): {}", id, map);
    final IndexRequest indexRequest = new IndexRequest(_indexName, _documentType, id);
    final long debug = indexRequest.ttl();
    if (_ttl > 0) {
        indexRequest.ttl(_ttl);
        System.out.println("Setting TTL to " + _ttl);
        System.out.println("IndexRequest now has ttl of " + indexRequest.ttl());
    }
    indexRequest.source(map);
    indexRequest.operationThreaded(false);
    bulkRequestBuilder.add(indexRequest);
}

// execute and block until done.
BulkResponse response;
try {
    response = bulkRequestBuilder.execute().actionGet();

稍后我通过轮询此方法检查我的单元测试,但文档计数永远不会下降。

public long getDocumentCount() throws Exception {
    Client client = getClient();
    try {
        client.admin().indices().refresh(new RefreshRequest(INDEX_NAME)).actionGet();

        ActionFuture<CountResponse> response = client.count(new CountRequest(INDEX_NAME).types(DOCUMENT_TYPE));
        CountResponse countResponse = response.get();
        return countResponse.getCount();
    } finally {
        client.close();
    }
}

1 个答案:

答案 0 :(得分:1)

经过长时间的谷歌搜索和编写测试程序后,我想出了一个如何使用Java API中的ttl和基本索引/对象创建的工作示例。坦率地说,文档中的大多数示例都是微不足道的,一些JavaDoc和端到端示例将会帮助我们这些使用非REST接口的人。

好啊。

此处代码:Adding mapping to a type from Java - how do I do it?