Установка времени жизни (TTL) из Java - запрашиваемый образец
РЕДАКТИРОВАТЬ: Это в основном то, что я хочу сделать, только на Java
Используя ElasticSearch, мы добавляем документы в индекс, минуя элементы IndexRequest, в BulkRequestBuilder.
Я хотел бы, чтобы документы были удалены из индекса по прошествии некоторого времени (время жить / ттл)
Это может быть сделано либо путем установки значения по умолчанию для индекса, либо для каждого документа отдельно. Любой подход меня устраивает.
Код ниже является попыткой сделать это для каждого документа. Это не работает. Я думаю, это потому, что TTL не включен для индекса. Либо покажи мне, какой код Java мне нужно добавить, чтобы включить TTL, чтобы код ниже работал, или покажи мне другой код, который позволяет TTL + устанавливает значение TTL по умолчанию для индекса в Java. Я знаю, как это сделать из API REST, но мне нужно сделать это из кода 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 ответ
После долгого дня поиска и написания тестовых программ я придумал рабочий пример того, как использовать ttl и базовое создание индекса / объекта из Java API. Честно говоря, большинство примеров в документации тривиальны, а некоторые JavaDoc и сквозные примеры помогут ДЛИННОМУ помочь тем из нас, кто использует интерфейсы без REST.
Ах хорошо.
Код здесь: добавление сопоставления для типа из Java - как мне это сделать?