編集: これは基本的に私がやりたいことであり、Javaでのみ
ElasticSearch を使用して、インデックスにドキュメントを追加し、IndexRequest アイテムを BulkRequestBuilder にバイパスします。
一定の時間が経過した後 (有効期限/ttl) にドキュメントをインデックスから削除したい
これは、インデックスのデフォルトを設定するか、ドキュメントごとに行うことができます。どちらのアプローチでも問題ありません。
以下のコードは、ドキュメントごとに実行する試みです。それは動作しません。インデックスに対してTTLが有効になっていないためだと思います。以下のコードが機能するように TTL を有効にするために追加する必要がある Java コードを表示するか、または TTL を有効にして Java のインデックスのデフォルトの TTL 値を設定する別のコードを表示します。REST API から行う方法は知っていますが、必要です可能であれば、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();
}
}