You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/06/21 09:16:26 UTC
[james-project] 03/12: JAMES-3202 Add get document action to
ElasticSearchIndexer
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit fae3ecee64473fdd77f12e20e92935c7db62a093
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Tue Jun 9 15:37:43 2020 +0700
JAMES-3202 Add get document action to ElasticSearchIndexer
---
.../james/backends/es/ElasticSearchIndexer.java | 14 ++++++++++++
.../backends/es/ReactorElasticSearchClient.java | 6 +++++
.../backends/es/ElasticSearchIndexerTest.java | 26 ++++++++++++++++++++++
3 files changed, 46 insertions(+)
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java
index 3b5c8a2..049dcd5 100644
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java
@@ -24,6 +24,8 @@ import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
+import org.elasticsearch.action.get.GetRequest;
+import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateRequest;
@@ -120,4 +122,16 @@ public class ElasticSearchIndexer {
private void checkArgument(String content) {
Preconditions.checkArgument(content != null, "content should be provided");
}
+
+ public Mono<GetResponse> get(DocumentId id, RoutingKey routingKey) {
+ return Mono.fromRunnable(() -> {
+ Preconditions.checkNotNull(id);
+ Preconditions.checkNotNull(routingKey);
+ })
+ .then(client.get(new GetRequest(aliasName.getValue())
+ .type(NodeMappingFactory.DEFAULT_MAPPING_NAME)
+ .id(id.asString())
+ .routing(routingKey.asString()),
+ RequestOptions.DEFAULT));
+ }
}
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ReactorElasticSearchClient.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ReactorElasticSearchClient.java
index 1636df6..fc6d26e 100644
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ReactorElasticSearchClient.java
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ReactorElasticSearchClient.java
@@ -37,6 +37,8 @@ import org.elasticsearch.action.explain.ExplainRequest;
import org.elasticsearch.action.explain.ExplainResponse;
import org.elasticsearch.action.fieldcaps.FieldCapabilitiesRequest;
import org.elasticsearch.action.fieldcaps.FieldCapabilitiesResponse;
+import org.elasticsearch.action.get.GetRequest;
+import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.main.MainResponse;
@@ -147,6 +149,10 @@ public class ReactorElasticSearchClient implements AutoCloseable {
return toReactor(listener -> client.searchTemplateAsync(searchTemplateRequest, options, listener));
}
+ public Mono<GetResponse> get(GetRequest getRequest, RequestOptions options) {
+ return toReactor(listener -> client.getAsync(getRequest, options, listener));
+ }
+
@Override
public void close() throws IOException {
client.close();
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
index ac320ca..f0c9f9d 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
@@ -30,6 +30,7 @@ import java.io.IOException;
import org.awaitility.Awaitility;
import org.awaitility.Duration;
import org.awaitility.core.ConditionFactory;
+import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
@@ -264,4 +265,29 @@ class ElasticSearchIndexerTest {
assertThatCode(() -> testee.delete(ImmutableList.of(), ROUTING).block())
.doesNotThrowAnyException();
}
+
+ @Test
+ void getShouldWork() {
+ DocumentId documentId = DocumentId.fromString("1");
+ String content = "{\"message\":\"trying out Elasticsearch\"}";
+
+ testee.index(documentId, content, useDocumentId(documentId)).block();
+ elasticSearch.awaitForElasticSearch();
+
+ GetResponse getResponse = testee.get(documentId, useDocumentId(documentId)).block();
+
+ assertThat(getResponse.getSourceAsString()).isEqualTo(content);
+ }
+
+ @Test
+ void getShouldThrowWhenIdIsNull() {
+ assertThatThrownBy(() -> testee.get(null, ROUTING).block())
+ .isInstanceOf(NullPointerException.class);
+ }
+
+ @Test
+ void getShouldThrowWhenRoutingKeyIsNull() {
+ assertThatThrownBy(() -> testee.get(DOCUMENT_ID, null).block())
+ .isInstanceOf(NullPointerException.class);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org