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 2019/05/23 03:37:52 UTC
[james-project] 04/14: JAMES-2764 Migrate mailbox ES to ES6
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 b638a96d65fe117194df51e48af1998666143314
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Fri May 17 17:55:29 2019 +0700
JAMES-2764 Migrate mailbox ES to ES6
---
.../james/backends/es/v6/IndexCreationFactory.java | 9 +-
.../v6/ElasticSearchMailboxConfiguration.java | 8 +-
.../v6/MailboxElasticSearchConstants.java | 8 +-
.../elasticsearch/v6/MailboxIndexCreationUtil.java | 26 +-
.../elasticsearch/v6/MailboxMappingFactory.java | 440 ++++++++++-----------
.../ElasticSearchListeningMessageSearchIndex.java | 13 +-
.../elasticsearch/v6/query/CriterionConverter.java | 15 +-
.../elasticsearch/v6/query/SortConverter.java | 26 +-
.../v6/search/ElasticSearchSearcher.java | 80 ++--
9 files changed, 303 insertions(+), 322 deletions(-)
diff --git a/backends-common/elasticsearch-v6/src/main/java/org/apache/james/backends/es/v6/IndexCreationFactory.java b/backends-common/elasticsearch-v6/src/main/java/org/apache/james/backends/es/v6/IndexCreationFactory.java
index 8c281d0..17c51c7 100644
--- a/backends-common/elasticsearch-v6/src/main/java/org/apache/james/backends/es/v6/IndexCreationFactory.java
+++ b/backends-common/elasticsearch-v6/src/main/java/org/apache/james/backends/es/v6/IndexCreationFactory.java
@@ -173,14 +173,15 @@ public class IndexCreationFactory {
private static final Logger LOGGER = LoggerFactory.getLogger(IndexCreationFactory.class);
private static final String INDEX_ALREADY_EXISTS_EXCEPTION_MESSAGE = "type=resource_already_exists_exception";
- private static final String CASE_INSENSITIVE = "case_insensitive";
- private static final String KEEP_MAIL_AND_URL = "keep_mail_and_url";
- private static final String SNOWBALL_KEEP_MAIL_AND_URL = "snowball_keep_mail_and_token";
- private static final String ENGLISH_SNOWBALL = "english_snowball";
private final int nbShards;
private final int nbReplica;
+ public static final String CASE_INSENSITIVE = "case_insensitive";
+ public static final String KEEP_MAIL_AND_URL = "keep_mail_and_url";
+ public static final String SNOWBALL_KEEP_MAIL_AND_URL = "snowball_keep_mail_and_token";
+ public static final String ENGLISH_SNOWBALL = "english_snowball";
+
@Inject
public IndexCreationFactory(ElasticSearchConfiguration configuration) {
this.nbShards = configuration.getNbShards();
diff --git a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/ElasticSearchMailboxConfiguration.java b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/ElasticSearchMailboxConfiguration.java
index 6ff086c..3bac6b3 100644
--- a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/ElasticSearchMailboxConfiguration.java
+++ b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/ElasticSearchMailboxConfiguration.java
@@ -23,9 +23,9 @@ import java.util.Objects;
import java.util.Optional;
import org.apache.commons.configuration.Configuration;
-import org.apache.james.backends.es.IndexName;
-import org.apache.james.backends.es.ReadAliasName;
-import org.apache.james.backends.es.WriteAliasName;
+import org.apache.james.backends.es.v6.IndexName;
+import org.apache.james.backends.es.v6.ReadAliasName;
+import org.apache.james.backends.es.v6.WriteAliasName;
import org.apache.james.util.OptionalUtils;
public class ElasticSearchMailboxConfiguration {
@@ -114,7 +114,7 @@ public class ElasticSearchMailboxConfiguration {
public static final boolean DEFAULT_INDEX_ATTACHMENTS = true;
public static final int DEFAULT_NB_SHARDS = 5;
public static final int DEFAULT_NB_REPLICA = 1;
- public static final int DEFAULT_PORT = 9300;
+ public static final int DEFAULT_PORT = 9200;
public static final Optional<Integer> DEFAULT_PORT_AS_OPTIONAL = Optional.of(DEFAULT_PORT);
public static final ElasticSearchMailboxConfiguration DEFAULT_CONFIGURATION = builder().build();
diff --git a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/MailboxElasticSearchConstants.java b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/MailboxElasticSearchConstants.java
index 301127e..07a7644 100644
--- a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/MailboxElasticSearchConstants.java
+++ b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/MailboxElasticSearchConstants.java
@@ -19,10 +19,9 @@
package org.apache.james.mailbox.elasticsearch.v6;
-import org.apache.james.backends.es.IndexName;
-import org.apache.james.backends.es.ReadAliasName;
-import org.apache.james.backends.es.TypeName;
-import org.apache.james.backends.es.WriteAliasName;
+import org.apache.james.backends.es.v6.IndexName;
+import org.apache.james.backends.es.v6.ReadAliasName;
+import org.apache.james.backends.es.v6.WriteAliasName;
public interface MailboxElasticSearchConstants {
@@ -33,5 +32,4 @@ public interface MailboxElasticSearchConstants {
WriteAliasName DEFAULT_MAILBOX_WRITE_ALIAS = new WriteAliasName("mailboxWriteAlias");
ReadAliasName DEFAULT_MAILBOX_READ_ALIAS = new ReadAliasName("mailboxReadAlias");
IndexName DEFAULT_MAILBOX_INDEX = new IndexName("mailbox_v1");
- TypeName MESSAGE_TYPE = new TypeName("message");
}
diff --git a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/MailboxIndexCreationUtil.java b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/MailboxIndexCreationUtil.java
index 4d320e4..8a41671 100644
--- a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/MailboxIndexCreationUtil.java
+++ b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/MailboxIndexCreationUtil.java
@@ -19,22 +19,23 @@
package org.apache.james.mailbox.elasticsearch.v6;
-import org.apache.james.backends.es.ElasticSearchConfiguration;
-import org.apache.james.backends.es.IndexCreationFactory;
-import org.apache.james.backends.es.IndexName;
-import org.apache.james.backends.es.NodeMappingFactory;
-import org.apache.james.backends.es.ReadAliasName;
-import org.apache.james.backends.es.WriteAliasName;
-import org.elasticsearch.client.Client;
+import java.io.IOException;
+
+import org.apache.james.backends.es.v6.ElasticSearchConfiguration;
+import org.apache.james.backends.es.v6.IndexCreationFactory;
+import org.apache.james.backends.es.v6.IndexName;
+import org.apache.james.backends.es.v6.NodeMappingFactory;
+import org.apache.james.backends.es.v6.ReadAliasName;
+import org.apache.james.backends.es.v6.WriteAliasName;
+import org.elasticsearch.client.RestHighLevelClient;
public class MailboxIndexCreationUtil {
- public static Client prepareClient(Client client,
+ public static RestHighLevelClient prepareClient(RestHighLevelClient client,
ReadAliasName readAlias,
WriteAliasName writeAlias,
IndexName indexName,
- ElasticSearchConfiguration configuration) {
-
+ ElasticSearchConfiguration configuration) throws IOException {
return NodeMappingFactory.applyMapping(
new IndexCreationFactory(configuration)
.useIndex(indexName)
@@ -42,15 +43,14 @@ public class MailboxIndexCreationUtil {
.addAlias(writeAlias)
.createIndexAndAliases(client),
indexName,
- MailboxElasticSearchConstants.MESSAGE_TYPE,
MailboxMappingFactory.getMappingContent());
}
- public static Client prepareDefaultClient(Client client, ElasticSearchConfiguration configuration) {
+ public static RestHighLevelClient prepareDefaultClient(RestHighLevelClient client, ElasticSearchConfiguration configuration) throws IOException {
return prepareClient(client,
MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS,
MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS,
MailboxElasticSearchConstants.DEFAULT_MAILBOX_INDEX,
- configuration);
+ configuration);
}
}
diff --git a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/MailboxMappingFactory.java b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/MailboxMappingFactory.java
index 2ecd6d3..4021f73 100644
--- a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/MailboxMappingFactory.java
+++ b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/MailboxMappingFactory.java
@@ -19,25 +19,24 @@
package org.apache.james.mailbox.elasticsearch.v6;
-import static org.apache.james.backends.es.IndexCreationFactory.CASE_INSENSITIVE;
-import static org.apache.james.backends.es.IndexCreationFactory.KEEP_MAIL_AND_URL;
-import static org.apache.james.backends.es.IndexCreationFactory.SNOWBALL_KEEP_MAIL_AND_URL;
-import static org.apache.james.backends.es.NodeMappingFactory.ANALYZER;
-import static org.apache.james.backends.es.NodeMappingFactory.BOOLEAN;
-import static org.apache.james.backends.es.NodeMappingFactory.FIELDS;
-import static org.apache.james.backends.es.NodeMappingFactory.FORMAT;
-import static org.apache.james.backends.es.NodeMappingFactory.IGNORE_ABOVE;
-import static org.apache.james.backends.es.NodeMappingFactory.INDEX;
-import static org.apache.james.backends.es.NodeMappingFactory.LONG;
-import static org.apache.james.backends.es.NodeMappingFactory.NESTED;
-import static org.apache.james.backends.es.NodeMappingFactory.NOT_ANALYZED;
-import static org.apache.james.backends.es.NodeMappingFactory.PROPERTIES;
-import static org.apache.james.backends.es.NodeMappingFactory.RAW;
-import static org.apache.james.backends.es.NodeMappingFactory.SEARCH_ANALYZER;
-import static org.apache.james.backends.es.NodeMappingFactory.SNOWBALL;
-import static org.apache.james.backends.es.NodeMappingFactory.SPLIT_EMAIL;
-import static org.apache.james.backends.es.NodeMappingFactory.STRING;
-import static org.apache.james.backends.es.NodeMappingFactory.TYPE;
+import static org.apache.james.backends.es.v6.IndexCreationFactory.CASE_INSENSITIVE;
+import static org.apache.james.backends.es.v6.IndexCreationFactory.KEEP_MAIL_AND_URL;
+import static org.apache.james.backends.es.v6.IndexCreationFactory.SNOWBALL_KEEP_MAIL_AND_URL;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.ANALYZER;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.BOOLEAN;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.FIELDS;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.FORMAT;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.IGNORE_ABOVE;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.KEYWORD;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.LONG;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.NESTED;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.NORMALIZER;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.PROPERTIES;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.RAW;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.SEARCH_ANALYZER;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.SNOWBALL;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.SPLIT_EMAIL;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.TYPE;
import static org.apache.james.mailbox.elasticsearch.v6.json.JsonMessageConstants.BCC;
import static org.apache.james.mailbox.elasticsearch.v6.json.JsonMessageConstants.CC;
import static org.apache.james.mailbox.elasticsearch.v6.json.JsonMessageConstants.DATE;
@@ -69,290 +68,267 @@ import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
import java.io.IOException;
-import org.apache.james.backends.es.NodeMappingFactory;
+import org.apache.james.backends.es.v6.NodeMappingFactory;
import org.apache.james.mailbox.elasticsearch.v6.json.JsonMessageConstants.EMailer;
-import org.apache.james.mailbox.elasticsearch.v6.json.JsonMessageConstants.Property;
import org.elasticsearch.common.xcontent.XContentBuilder;
public class MailboxMappingFactory {
private static final int MAXIMUM_TERM_LENGTH = 4096;
private static final String STANDARD = "standard";
+ private static final String STORE = "store";
+ private static final String FIELD_DATA = "fielddata";
+
public static XContentBuilder getMappingContent() {
try {
return jsonBuilder()
.startObject()
- .startObject(MailboxElasticSearchConstants.MESSAGE_TYPE.getValue())
- .startObject(PROPERTIES)
+ .startObject(PROPERTIES)
- .startObject(MESSAGE_ID)
- .field(TYPE, STRING)
- .field(INDEX, NOT_ANALYZED)
- .endObject()
+ .startObject(MESSAGE_ID)
+ .field(TYPE, KEYWORD)
+ .field(STORE, true)
+ .endObject()
- .startObject(UID)
- .field(TYPE, LONG)
- .endObject()
+ .startObject(UID)
+ .field(TYPE, LONG)
+ .field(STORE, true)
+ .endObject()
- .startObject(MODSEQ)
- .field(TYPE, LONG)
- .endObject()
+ .startObject(MODSEQ)
+ .field(TYPE, LONG)
+ .endObject()
- .startObject(SIZE)
- .field(TYPE, LONG)
- .endObject()
+ .startObject(SIZE)
+ .field(TYPE, LONG)
+ .endObject()
- .startObject(IS_ANSWERED)
- .field(TYPE, BOOLEAN)
- .endObject()
+ .startObject(IS_ANSWERED)
+ .field(TYPE, BOOLEAN)
+ .endObject()
- .startObject(IS_DELETED)
- .field(TYPE, BOOLEAN)
- .endObject()
+ .startObject(IS_DELETED)
+ .field(TYPE, BOOLEAN)
+ .endObject()
- .startObject(IS_DRAFT)
- .field(TYPE, BOOLEAN)
- .endObject()
+ .startObject(IS_DRAFT)
+ .field(TYPE, BOOLEAN)
+ .endObject()
- .startObject(IS_FLAGGED)
- .field(TYPE, BOOLEAN)
- .endObject()
+ .startObject(IS_FLAGGED)
+ .field(TYPE, BOOLEAN)
+ .endObject()
- .startObject(IS_RECENT)
- .field(TYPE, BOOLEAN)
- .endObject()
+ .startObject(IS_RECENT)
+ .field(TYPE, BOOLEAN)
+ .endObject()
- .startObject(IS_UNREAD)
- .field(TYPE, BOOLEAN)
- .endObject()
+ .startObject(IS_UNREAD)
+ .field(TYPE, BOOLEAN)
+ .endObject()
- .startObject(DATE)
- .field(TYPE, NodeMappingFactory.DATE)
- .field(FORMAT, "yyyy-MM-dd'T'HH:mm:ssZ")
- .endObject()
+ .startObject(DATE)
+ .field(TYPE, NodeMappingFactory.DATE)
+ .field(FORMAT, "yyyy-MM-dd'T'HH:mm:ssZ")
+ .endObject()
- .startObject(SENT_DATE)
- .field(TYPE, NodeMappingFactory.DATE)
- .field(FORMAT, "yyyy-MM-dd'T'HH:mm:ssZ")
- .endObject()
+ .startObject(SENT_DATE)
+ .field(TYPE, NodeMappingFactory.DATE)
+ .field(FORMAT, "yyyy-MM-dd'T'HH:mm:ssZ")
+ .endObject()
- .startObject(MEDIA_TYPE)
- .field(TYPE, STRING)
- .field(INDEX, NOT_ANALYZED)
- .endObject()
+ .startObject(MEDIA_TYPE)
+ .field(TYPE, KEYWORD)
+ .endObject()
- .startObject(SUBTYPE)
- .field(TYPE, STRING)
- .field(INDEX, NOT_ANALYZED)
- .endObject()
+ .startObject(SUBTYPE)
+ .field(TYPE, KEYWORD)
+ .endObject()
- .startObject(USER_FLAGS)
- .field(TYPE, STRING)
- .field(INDEX, NOT_ANALYZED)
- .endObject()
+ .startObject(USER_FLAGS)
+ .field(TYPE, KEYWORD)
+ .endObject()
- .startObject(FROM)
- .field(TYPE, NESTED)
- .startObject(PROPERTIES)
- .startObject(EMailer.NAME)
- .field(TYPE, STRING)
- .field(ANALYZER, KEEP_MAIL_AND_URL)
- .startObject(FIELDS)
- .startObject(RAW)
- .field(TYPE, STRING)
- .field(ANALYZER, CASE_INSENSITIVE)
- .endObject()
+ .startObject(FROM)
+ .field(TYPE, NESTED)
+ .startObject(PROPERTIES)
+ .startObject(EMailer.NAME)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, KEEP_MAIL_AND_URL)
+ .startObject(FIELDS)
+ .startObject(RAW)
+ .field(TYPE, KEYWORD)
+ .field(NORMALIZER, CASE_INSENSITIVE)
.endObject()
.endObject()
- .startObject(EMailer.ADDRESS)
- .field(TYPE, STRING)
- .field(ANALYZER, STANDARD)
- .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
- .startObject(FIELDS)
- .startObject(RAW)
- .field(TYPE, STRING)
- .field(ANALYZER, CASE_INSENSITIVE)
- .endObject()
+ .endObject()
+ .startObject(EMailer.ADDRESS)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, STANDARD)
+ .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
+ .startObject(FIELDS)
+ .startObject(RAW)
+ .field(TYPE, KEYWORD)
+ .field(NORMALIZER, CASE_INSENSITIVE)
.endObject()
.endObject()
.endObject()
.endObject()
+ .endObject()
- .startObject(SUBJECT)
- .field(TYPE, STRING)
- .field(ANALYZER, KEEP_MAIL_AND_URL)
- .startObject(FIELDS)
- .startObject(RAW)
- .field(TYPE, STRING)
- .field(ANALYZER, CASE_INSENSITIVE)
- .endObject()
+ .startObject(SUBJECT)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, KEEP_MAIL_AND_URL)
+ .startObject(FIELDS)
+ .startObject(RAW)
+ .field(TYPE, KEYWORD)
+ .field(NORMALIZER, CASE_INSENSITIVE)
.endObject()
.endObject()
+ .endObject()
- .startObject(TO)
- .field(TYPE, NESTED)
- .startObject(PROPERTIES)
- .startObject(EMailer.NAME)
- .field(TYPE, STRING)
- .field(ANALYZER, KEEP_MAIL_AND_URL)
- .startObject(FIELDS)
- .startObject(RAW)
- .field(TYPE, STRING)
- .field(ANALYZER, CASE_INSENSITIVE)
- .endObject()
+ .startObject(TO)
+ .field(TYPE, NESTED)
+ .startObject(PROPERTIES)
+ .startObject(EMailer.NAME)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, KEEP_MAIL_AND_URL)
+ .startObject(FIELDS)
+ .startObject(RAW)
+ .field(TYPE, KEYWORD)
+ .field(NORMALIZER, CASE_INSENSITIVE)
.endObject()
.endObject()
- .startObject(EMailer.ADDRESS)
- .field(TYPE, STRING)
- .field(ANALYZER, STANDARD)
- .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
- .startObject(FIELDS)
- .startObject(RAW)
- .field(TYPE, STRING)
- .field(ANALYZER, CASE_INSENSITIVE)
- .endObject()
+ .endObject()
+ .startObject(EMailer.ADDRESS)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, STANDARD)
+ .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
+ .startObject(FIELDS)
+ .startObject(RAW)
+ .field(TYPE, KEYWORD)
+ .field(NORMALIZER, CASE_INSENSITIVE)
.endObject()
.endObject()
.endObject()
.endObject()
+ .endObject()
- .startObject(CC)
- .field(TYPE, NESTED)
- .startObject(PROPERTIES)
- .startObject(EMailer.NAME)
- .field(TYPE, STRING)
- .field(ANALYZER, KEEP_MAIL_AND_URL)
- .startObject(FIELDS)
- .startObject(RAW)
- .field(TYPE, STRING)
- .field(ANALYZER, CASE_INSENSITIVE)
- .endObject()
+ .startObject(CC)
+ .field(TYPE, NESTED)
+ .startObject(PROPERTIES)
+ .startObject(EMailer.NAME)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, KEEP_MAIL_AND_URL)
+ .startObject(FIELDS)
+ .startObject(RAW)
+ .field(TYPE, KEYWORD)
+ .field(NORMALIZER, CASE_INSENSITIVE)
.endObject()
.endObject()
- .startObject(EMailer.ADDRESS)
- .field(TYPE, STRING)
- .field(ANALYZER, STANDARD)
- .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
- .startObject(FIELDS)
- .startObject(RAW)
- .field(TYPE, STRING)
- .field(ANALYZER, CASE_INSENSITIVE)
- .endObject()
+ .endObject()
+ .startObject(EMailer.ADDRESS)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, STANDARD)
+ .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
+ .startObject(FIELDS)
+ .startObject(RAW)
+ .field(TYPE, KEYWORD)
+ .field(NORMALIZER, CASE_INSENSITIVE)
.endObject()
.endObject()
.endObject()
.endObject()
+ .endObject()
- .startObject(BCC)
- .field(TYPE, NESTED)
- .startObject(PROPERTIES)
- .startObject(EMailer.NAME)
- .field(TYPE, STRING)
- .field(ANALYZER, KEEP_MAIL_AND_URL)
- .startObject(FIELDS)
- .startObject(RAW)
- .field(TYPE, STRING)
- .field(ANALYZER, CASE_INSENSITIVE)
- .endObject()
+ .startObject(BCC)
+ .field(TYPE, NESTED)
+ .startObject(PROPERTIES)
+ .startObject(EMailer.NAME)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, KEEP_MAIL_AND_URL)
+ .startObject(FIELDS)
+ .startObject(RAW)
+ .field(TYPE, KEYWORD)
+ .field(NORMALIZER, CASE_INSENSITIVE)
.endObject()
.endObject()
- .startObject(EMailer.ADDRESS)
- .field(TYPE, STRING)
- .field(ANALYZER, STANDARD)
- .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
- .startObject(FIELDS)
- .startObject(RAW)
- .field(TYPE, STRING)
- .field(ANALYZER, CASE_INSENSITIVE)
- .endObject()
+ .endObject()
+ .startObject(EMailer.ADDRESS)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, STANDARD)
+ .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
+ .startObject(FIELDS)
+ .startObject(RAW)
+ .field(TYPE, KEYWORD)
+ .field(NORMALIZER, CASE_INSENSITIVE)
.endObject()
.endObject()
.endObject()
.endObject()
+ .endObject()
- .startObject(MAILBOX_ID)
- .field(TYPE, STRING)
- .field(INDEX, NOT_ANALYZED)
- .endObject()
+ .startObject(MAILBOX_ID)
+ .field(TYPE, KEYWORD)
+ .field(STORE, true)
+ .endObject()
- .startObject(MIME_MESSAGE_ID)
- .field(TYPE, STRING)
- .field(INDEX, NOT_ANALYZED)
- .endObject()
+ .startObject(MIME_MESSAGE_ID)
+ .field(TYPE, KEYWORD)
+ .endObject()
- .startObject(USERS)
- .field(TYPE, STRING)
- .field(INDEX, NOT_ANALYZED)
- .endObject()
+ .startObject(USERS)
+ .field(TYPE, KEYWORD)
+ .endObject()
- .startObject(PROPERTIES)
- .field(TYPE, NESTED)
- .startObject(PROPERTIES)
- .startObject(Property.NAMESPACE)
- .field(TYPE, STRING)
- .field(INDEX, NOT_ANALYZED)
- .endObject()
- .startObject(Property.NAME)
- .field(TYPE, STRING)
- .field(INDEX, NOT_ANALYZED)
- .endObject()
- .startObject(Property.VALUE)
- .field(TYPE, STRING)
- .field(INDEX, NOT_ANALYZED)
- .endObject()
+ .startObject(TEXT_BODY)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, KEEP_MAIL_AND_URL)
+ .startObject(FIELDS)
+ .startObject(SPLIT_EMAIL)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, STANDARD)
+ .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
.endObject()
- .endObject()
-
- .startObject(TEXT_BODY)
- .field(TYPE, STRING)
- .field(ANALYZER, KEEP_MAIL_AND_URL)
- .startObject(FIELDS)
- .startObject(SPLIT_EMAIL)
- .field(TYPE, STRING)
- .field(ANALYZER, STANDARD)
- .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
- .endObject()
- .startObject(RAW)
- .field(TYPE, STRING)
- .field(ANALYZER, CASE_INSENSITIVE)
- .field(IGNORE_ABOVE, MAXIMUM_TERM_LENGTH)
- .endObject()
+ .startObject(RAW)
+ .field(TYPE, KEYWORD)
+ .field(NORMALIZER, CASE_INSENSITIVE)
+ .field(IGNORE_ABOVE, MAXIMUM_TERM_LENGTH)
.endObject()
.endObject()
+ .endObject()
- .startObject(HTML_BODY)
- .field(TYPE, STRING)
- .field(ANALYZER, KEEP_MAIL_AND_URL)
- .startObject(FIELDS)
- .startObject(SPLIT_EMAIL)
- .field(TYPE, STRING)
- .field(ANALYZER, STANDARD)
- .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
- .endObject()
- .startObject(RAW)
- .field(TYPE, STRING)
- .field(ANALYZER, CASE_INSENSITIVE)
- .field(IGNORE_ABOVE, MAXIMUM_TERM_LENGTH)
- .endObject()
+ .startObject(HTML_BODY)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, KEEP_MAIL_AND_URL)
+ .startObject(FIELDS)
+ .startObject(SPLIT_EMAIL)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, STANDARD)
+ .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
+ .endObject()
+ .startObject(RAW)
+ .field(TYPE, KEYWORD)
+ .field(NORMALIZER, CASE_INSENSITIVE)
+ .field(IGNORE_ABOVE, MAXIMUM_TERM_LENGTH)
.endObject()
.endObject()
+ .endObject()
- .startObject(HAS_ATTACHMENT)
- .field(TYPE, BOOLEAN)
- .endObject()
+ .startObject(HAS_ATTACHMENT)
+ .field(TYPE, BOOLEAN)
+ .endObject()
- .startObject(TEXT)
- .field(TYPE, STRING)
- .field(ANALYZER, SNOWBALL_KEEP_MAIL_AND_URL)
- .field(IGNORE_ABOVE, MAXIMUM_TERM_LENGTH)
- .startObject(FIELDS)
- .startObject(SPLIT_EMAIL)
- .field(TYPE, STRING)
- .field(ANALYZER, SNOWBALL)
- .field(SEARCH_ANALYZER, SNOWBALL_KEEP_MAIL_AND_URL)
- .endObject()
+ .startObject(TEXT)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, SNOWBALL_KEEP_MAIL_AND_URL)
+ .startObject(FIELDS)
+ .startObject(SPLIT_EMAIL)
+ .field(TYPE, TEXT)
+ .field(ANALYZER, SNOWBALL)
+ .field(SEARCH_ANALYZER, SNOWBALL_KEEP_MAIL_AND_URL)
.endObject()
.endObject()
.endObject()
diff --git a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/events/ElasticSearchListeningMessageSearchIndex.java b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/events/ElasticSearchListeningMessageSearchIndex.java
index 8ee2204..f86ac35 100644
--- a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/events/ElasticSearchListeningMessageSearchIndex.java
+++ b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/events/ElasticSearchListeningMessageSearchIndex.java
@@ -20,6 +20,7 @@ package org.apache.james.mailbox.elasticsearch.v6.events;
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
+import java.io.IOException;
import java.util.Collection;
import java.util.EnumSet;
import java.util.Iterator;
@@ -29,8 +30,8 @@ import java.util.Optional;
import javax.inject.Inject;
import javax.inject.Named;
-import org.apache.james.backends.es.ElasticSearchIndexer;
-import org.apache.james.backends.es.UpdatedRepresentation;
+import org.apache.james.backends.es.v6.ElasticSearchIndexer;
+import org.apache.james.backends.es.v6.UpdatedRepresentation;
import org.apache.james.mailbox.MailboxManager.MessageCapabilities;
import org.apache.james.mailbox.MailboxManager.SearchCapabilities;
import org.apache.james.mailbox.MailboxSession;
@@ -100,7 +101,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
@Override
public Iterator<MessageUid> search(MailboxSession session, Mailbox mailbox, SearchQuery searchQuery) throws MailboxException {
Preconditions.checkArgument(session != null, "'session' is mandatory");
- Optional<Long> noLimit = Optional.empty();
+ Optional<Integer> noLimit = Optional.empty();
return searcher
.search(ImmutableList.of(mailbox.getMailboxId()), searchQuery, noLimit)
.map(SearchResult::getMessageUid)
@@ -126,7 +127,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
}
@Override
- public void add(MailboxSession session, Mailbox mailbox, MailboxMessage message) throws JsonProcessingException {
+ public void add(MailboxSession session, Mailbox mailbox, MailboxMessage message) throws IOException {
LOGGER.info("Indexing mailbox {}-{} of user {} on message {}",
mailbox.getName(),
mailbox.getMailboxId(),
@@ -152,7 +153,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
}
@Override
- public void delete(MailboxSession session, Mailbox mailbox, Collection<MessageUid> expungedUids) {
+ public void delete(MailboxSession session, Mailbox mailbox, Collection<MessageUid> expungedUids) throws IOException {
elasticSearchIndexer.delete(expungedUids.stream()
.map(uid -> indexIdFor(mailbox, uid))
.collect(Guavate.toImmutableList()));
@@ -167,7 +168,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
}
@Override
- public void update(MailboxSession session, Mailbox mailbox, List<UpdatedFlags> updatedFlagsList) {
+ public void update(MailboxSession session, Mailbox mailbox, List<UpdatedFlags> updatedFlagsList) throws IOException {
elasticSearchIndexer.update(updatedFlagsList.stream()
.map(Throwing.<UpdatedFlags, UpdatedRepresentation>function(
updatedFlags -> createUpdatedDocumentPartFromUpdatedFlags(mailbox, updatedFlags))
diff --git a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/query/CriterionConverter.java b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/query/CriterionConverter.java
index 19612cc..7251f27 100644
--- a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/query/CriterionConverter.java
+++ b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/query/CriterionConverter.java
@@ -19,8 +19,8 @@
package org.apache.james.mailbox.elasticsearch.v6.query;
-import static org.apache.james.backends.es.NodeMappingFactory.RAW;
-import static org.apache.james.backends.es.NodeMappingFactory.SPLIT_EMAIL;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.RAW;
+import static org.apache.james.backends.es.v6.NodeMappingFactory.SPLIT_EMAIL;
import static org.elasticsearch.index.query.QueryBuilders.boolQuery;
import static org.elasticsearch.index.query.QueryBuilders.existsQuery;
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
@@ -45,6 +45,7 @@ import org.apache.james.mailbox.elasticsearch.v6.json.JsonMessageConstants;
import org.apache.james.mailbox.model.SearchQuery;
import org.apache.james.mailbox.model.SearchQuery.Criterion;
import org.apache.james.mailbox.model.SearchQuery.HeaderOperator;
+import org.apache.lucene.search.join.ScoreMode;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
@@ -275,10 +276,12 @@ public class CriterionConverter {
}
private QueryBuilder manageAddressFields(String headerName, String value) {
- return nestedQuery(getFieldNameFromHeaderName(headerName), boolQuery()
- .should(matchQuery(getFieldNameFromHeaderName(headerName) + "." + JsonMessageConstants.EMailer.NAME, value))
- .should(matchQuery(getFieldNameFromHeaderName(headerName) + "." + JsonMessageConstants.EMailer.ADDRESS, value))
- .should(matchQuery(getFieldNameFromHeaderName(headerName) + "." + JsonMessageConstants.EMailer.ADDRESS + "." + RAW, value)));
+ return nestedQuery(getFieldNameFromHeaderName(headerName),
+ boolQuery()
+ .should(matchQuery(getFieldNameFromHeaderName(headerName) + "." + JsonMessageConstants.EMailer.NAME, value))
+ .should(matchQuery(getFieldNameFromHeaderName(headerName) + "." + JsonMessageConstants.EMailer.ADDRESS, value))
+ .should(matchQuery(getFieldNameFromHeaderName(headerName) + "." + JsonMessageConstants.EMailer.ADDRESS + "." + RAW, value)),
+ ScoreMode.Avg);
}
private String getFieldNameFromHeaderName(String headerName) {
diff --git a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/query/SortConverter.java b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/query/SortConverter.java
index 52a2624..1a29c77 100644
--- a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/query/SortConverter.java
+++ b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/query/SortConverter.java
@@ -19,22 +19,22 @@
package org.apache.james.mailbox.elasticsearch.v6.query;
-import org.apache.james.backends.es.NodeMappingFactory;
+import org.apache.james.backends.es.v6.NodeMappingFactory;
import org.apache.james.mailbox.elasticsearch.v6.json.JsonMessageConstants;
import org.apache.james.mailbox.model.SearchQuery;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
+import org.elasticsearch.search.sort.SortMode;
import org.elasticsearch.search.sort.SortOrder;
public class SortConverter {
- private static final String MIN = "min";
private static final String PATH_SEPARATOR = ".";
public static FieldSortBuilder convertSort(SearchQuery.Sort sort) {
return getSortClause(sort.getSortClause())
.order(getOrder(sort))
- .sortMode(MIN);
+ .sortMode(SortMode.MIN);
}
private static FieldSortBuilder getSortClause(SearchQuery.Sort.SortClause clause) {
@@ -42,14 +42,14 @@ public class SortConverter {
case Arrival :
return SortBuilders.fieldSort(JsonMessageConstants.DATE);
case MailboxCc :
- return SortBuilders.fieldSort(JsonMessageConstants.CC + PATH_SEPARATOR + JsonMessageConstants.EMailer.ADDRESS)
- .setNestedPath(JsonMessageConstants.CC);
+ return SortBuilders.fieldSort(JsonMessageConstants.CC + PATH_SEPARATOR + JsonMessageConstants.EMailer.ADDRESS
+ + PATH_SEPARATOR + NodeMappingFactory.RAW).setNestedPath(JsonMessageConstants.CC);
case MailboxFrom :
- return SortBuilders.fieldSort(JsonMessageConstants.FROM + PATH_SEPARATOR + JsonMessageConstants.EMailer.ADDRESS)
- .setNestedPath(JsonMessageConstants.FROM);
+ return SortBuilders.fieldSort(JsonMessageConstants.FROM + PATH_SEPARATOR + JsonMessageConstants.EMailer.ADDRESS
+ + PATH_SEPARATOR + NodeMappingFactory.RAW).setNestedPath(JsonMessageConstants.FROM);
case MailboxTo :
- return SortBuilders.fieldSort(JsonMessageConstants.TO + PATH_SEPARATOR + JsonMessageConstants.EMailer.ADDRESS)
- .setNestedPath(JsonMessageConstants.TO);
+ return SortBuilders.fieldSort(JsonMessageConstants.TO + PATH_SEPARATOR + JsonMessageConstants.EMailer.ADDRESS
+ + PATH_SEPARATOR + NodeMappingFactory.RAW).setNestedPath(JsonMessageConstants.TO);
case BaseSubject :
return SortBuilders.fieldSort(JsonMessageConstants.SUBJECT + PATH_SEPARATOR + NodeMappingFactory.RAW);
case Size :
@@ -59,11 +59,11 @@ public class SortConverter {
case Uid :
return SortBuilders.fieldSort(JsonMessageConstants.UID);
case DisplayFrom:
- return SortBuilders.fieldSort(JsonMessageConstants.FROM + PATH_SEPARATOR + JsonMessageConstants.EMailer.NAME + PATH_SEPARATOR + NodeMappingFactory.RAW)
- .setNestedPath(JsonMessageConstants.FROM);
+ return SortBuilders.fieldSort(JsonMessageConstants.FROM + PATH_SEPARATOR + JsonMessageConstants.EMailer.NAME
+ + PATH_SEPARATOR + NodeMappingFactory.RAW).setNestedPath(JsonMessageConstants.FROM);
case DisplayTo:
- return SortBuilders.fieldSort(JsonMessageConstants.TO + PATH_SEPARATOR + JsonMessageConstants.EMailer.NAME + PATH_SEPARATOR + NodeMappingFactory.RAW)
- .setNestedPath(JsonMessageConstants.TO);
+ return SortBuilders.fieldSort(JsonMessageConstants.TO + PATH_SEPARATOR + JsonMessageConstants.EMailer.NAME
+ + PATH_SEPARATOR + NodeMappingFactory.RAW).setNestedPath(JsonMessageConstants.TO);
case Id:
return SortBuilders.fieldSort(JsonMessageConstants.MESSAGE_ID);
default:
diff --git a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/search/ElasticSearchSearcher.java b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/search/ElasticSearchSearcher.java
index 195326e..f527dd4 100644
--- a/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/search/ElasticSearchSearcher.java
+++ b/mailbox/elasticsearch-v6/src/main/java/org/apache/james/mailbox/elasticsearch/v6/search/ElasticSearchSearcher.java
@@ -19,101 +19,103 @@
package org.apache.james.mailbox.elasticsearch.v6.search;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Optional;
import java.util.stream.Stream;
-import org.apache.james.backends.es.AliasName;
-import org.apache.james.backends.es.ReadAliasName;
-import org.apache.james.backends.es.TypeName;
-import org.apache.james.backends.es.search.ScrollIterable;
+import org.apache.james.backends.es.v6.AliasName;
+import org.apache.james.backends.es.v6.NodeMappingFactory;
+import org.apache.james.backends.es.v6.ReadAliasName;
+import org.apache.james.backends.es.v6.search.ScrollIterable;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.elasticsearch.v6.json.JsonMessageConstants;
import org.apache.james.mailbox.elasticsearch.v6.query.QueryConverter;
import org.apache.james.mailbox.elasticsearch.v6.query.SortConverter;
-import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.model.SearchQuery;
import org.apache.james.mailbox.store.search.MessageSearchIndex;
-import org.apache.james.util.streams.Iterators;
-import org.elasticsearch.action.search.SearchRequestBuilder;
+import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.client.Client;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.common.document.DocumentField;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.search.SearchHit;
-import org.elasticsearch.search.SearchHitField;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class ElasticSearchSearcher {
+import com.google.common.collect.ImmutableList;
- public static final int DEFAULT_SEARCH_SIZE = 100;
+public class ElasticSearchSearcher {
private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchSearcher.class);
- private static final TimeValue TIMEOUT = new TimeValue(60000);
+ private static final TimeValue TIMEOUT = TimeValue.timeValueMinutes(1);
+ private static final ImmutableList STORED_FIELDS = ImmutableList.of(JsonMessageConstants.MAILBOX_ID,
+ JsonMessageConstants.UID, JsonMessageConstants.MESSAGE_ID);
- private final Client client;
+ private final RestHighLevelClient client;
private final QueryConverter queryConverter;
private final int size;
private final MailboxId.Factory mailboxIdFactory;
private final MessageId.Factory messageIdFactory;
private final AliasName aliasName;
- private final TypeName typeName;
- public ElasticSearchSearcher(Client client, QueryConverter queryConverter, int size,
+ public ElasticSearchSearcher(RestHighLevelClient client, QueryConverter queryConverter, int size,
MailboxId.Factory mailboxIdFactory, MessageId.Factory messageIdFactory,
- ReadAliasName aliasName, TypeName typeName) {
+ ReadAliasName aliasName) {
this.client = client;
this.queryConverter = queryConverter;
this.size = size;
this.mailboxIdFactory = mailboxIdFactory;
this.messageIdFactory = messageIdFactory;
this.aliasName = aliasName;
- this.typeName = typeName;
}
public Stream<MessageSearchIndex.SearchResult> search(Collection<MailboxId> mailboxIds, SearchQuery query,
- Optional<Long> limit) throws MailboxException {
- SearchRequestBuilder searchRequestBuilder = getSearchRequestBuilder(client, mailboxIds, query, limit);
- Stream<MessageSearchIndex.SearchResult> pairStream = new ScrollIterable(client, searchRequestBuilder).stream()
+ Optional<Integer> limit) {
+ SearchRequest searchRequest = prepareSearch(mailboxIds, query, limit);
+ Stream<MessageSearchIndex.SearchResult> pairStream = new ScrollIterable(client, searchRequest).stream()
.flatMap(this::transformResponseToUidStream);
return limit.map(pairStream::limit)
.orElse(pairStream);
}
- private SearchRequestBuilder getSearchRequestBuilder(Client client, Collection<MailboxId> users,
- SearchQuery query, Optional<Long> limit) {
- return query.getSorts()
+ private SearchRequest prepareSearch(Collection<MailboxId> users, SearchQuery query, Optional<Integer> limit) {
+ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
+ .query(queryConverter.from(users, query))
+ .size(computeRequiredSize(limit))
+ .storedFields(STORED_FIELDS);
+
+ query.getSorts()
.stream()
- .reduce(
- client.prepareSearch(aliasName.getValue())
- .setTypes(typeName.getValue())
- .setScroll(TIMEOUT)
- .addFields(JsonMessageConstants.UID, JsonMessageConstants.MAILBOX_ID, JsonMessageConstants.MESSAGE_ID)
- .setQuery(queryConverter.from(users, query))
- .setSize(computeRequiredSize(limit)),
- (searchBuilder, sort) -> searchBuilder.addSort(SortConverter.convertSort(sort)),
- (partialResult1, partialResult2) -> partialResult1);
+ .map(SortConverter::convertSort)
+ .forEach(searchSourceBuilder::sort);
+
+ return new SearchRequest(aliasName.getValue())
+ .types(NodeMappingFactory.DEFAULT_MAPPING_NAME)
+ .scroll(TIMEOUT)
+ .source(searchSourceBuilder);
}
- private int computeRequiredSize(Optional<Long> limit) {
+ private int computeRequiredSize(Optional<Integer> limit) {
return limit.map(value -> Math.min(value.intValue(), size))
.orElse(size);
}
private Stream<MessageSearchIndex.SearchResult> transformResponseToUidStream(SearchResponse searchResponse) {
- return Iterators.toStream(searchResponse.getHits().iterator())
+ return Arrays.stream(searchResponse.getHits().getHits())
.map(this::extractContentFromHit)
.filter(Optional::isPresent)
.map(Optional::get);
}
private Optional<MessageSearchIndex.SearchResult> extractContentFromHit(SearchHit hit) {
- SearchHitField mailboxId = hit.field(JsonMessageConstants.MAILBOX_ID);
- SearchHitField uid = hit.field(JsonMessageConstants.UID);
- Optional<SearchHitField> id = retrieveMessageIdField(hit);
+ DocumentField mailboxId = hit.field(JsonMessageConstants.MAILBOX_ID);
+ DocumentField uid = hit.field(JsonMessageConstants.UID);
+ Optional<DocumentField> id = retrieveMessageIdField(hit);
if (mailboxId != null && uid != null) {
Number uidAsNumber = uid.getValue();
return Optional.of(
@@ -127,8 +129,8 @@ public class ElasticSearchSearcher {
}
}
- private Optional<SearchHitField> retrieveMessageIdField(SearchHit hit) {
- if (hit.fields().keySet().contains(JsonMessageConstants.MESSAGE_ID)) {
+ private Optional<DocumentField> retrieveMessageIdField(SearchHit hit) {
+ if (hit.getFields().keySet().contains(JsonMessageConstants.MESSAGE_ID)) {
return Optional.ofNullable(hit.field(JsonMessageConstants.MESSAGE_ID));
} else {
return Optional.empty();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org