2

編集: これは基本的に私がやりたいことであり、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();
    }
}
4

1 に答える 1

1

テスト プログラムの作成とグーグル検索に長い 1 日を費やした後、Java API からの ttl と基本的なインデックス/オブジェクトの作成方法の実用的な例を思いつきました。率直に言って、ドキュメント内の例のほとんどは些細なものであり、一部の JavaDoc およびエンド ツー エンドの例は、REST 以外のインターフェイスを使用している私たちにとって非常に役立つものです。

まぁ。

コードはこちら: Java からの型へのマッピングの追加 - どうすればよいですか?

于 2014-02-27T15:20:56.337 に答える