blob: 91823e9280ddbac04f69a7921484ce0275681ee7 [file] [log] [blame]
/****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one *
* or more contributor license agreements. See the NOTICE file *
* distributed with this work for additional information *
* regarding copyright ownership. The ASF licenses this file *
* to you under the Apache License, Version 2.0 (the *
* "License"); you may not use this file except in compliance *
* with the License. You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
* KIND, either express or implied. See the License for the *
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
package org.apache.james.mailbox.opensearch;
import static org.apache.james.backends.opensearch.IndexCreationFactory.ANALYZER;
import static org.apache.james.backends.opensearch.IndexCreationFactory.BOOLEAN;
import static org.apache.james.backends.opensearch.IndexCreationFactory.CASE_INSENSITIVE;
import static org.apache.james.backends.opensearch.IndexCreationFactory.FIELDS;
import static org.apache.james.backends.opensearch.IndexCreationFactory.FORMAT;
import static org.apache.james.backends.opensearch.IndexCreationFactory.KEEP_MAIL_AND_URL;
import static org.apache.james.backends.opensearch.IndexCreationFactory.KEYWORD;
import static org.apache.james.backends.opensearch.IndexCreationFactory.LONG;
import static org.apache.james.backends.opensearch.IndexCreationFactory.NESTED;
import static org.apache.james.backends.opensearch.IndexCreationFactory.NORMALIZER;
import static org.apache.james.backends.opensearch.IndexCreationFactory.PROPERTIES;
import static org.apache.james.backends.opensearch.IndexCreationFactory.RAW;
import static org.apache.james.backends.opensearch.IndexCreationFactory.REQUIRED;
import static org.apache.james.backends.opensearch.IndexCreationFactory.ROUTING;
import static org.apache.james.backends.opensearch.IndexCreationFactory.SEARCH_ANALYZER;
import static org.apache.james.backends.opensearch.IndexCreationFactory.TYPE;
import static org.opensearch.common.xcontent.XContentFactory.jsonBuilder;
import java.io.IOException;
import org.apache.james.backends.opensearch.IndexCreationFactory;
import org.apache.james.mailbox.opensearch.json.JsonMessageConstants;
import org.opensearch.common.xcontent.XContentBuilder;
public class MailboxMappingFactory {
private static final String STANDARD = "standard";
private static final String STORE = "store";
public static XContentBuilder getMappingContent() {
try {
return jsonBuilder()
.startObject()
.field("dynamic", "strict")
.startObject(ROUTING)
.field(REQUIRED, true)
.endObject()
.startObject(PROPERTIES)
.startObject(JsonMessageConstants.MESSAGE_ID)
.field(TYPE, KEYWORD)
.field(STORE, true)
.endObject()
.startObject(JsonMessageConstants.THREAD_ID)
.field(TYPE, KEYWORD)
.endObject()
.startObject(JsonMessageConstants.UID)
.field(TYPE, LONG)
.field(STORE, true)
.endObject()
.startObject(JsonMessageConstants.MODSEQ)
.field(TYPE, LONG)
.endObject()
.startObject(JsonMessageConstants.SIZE)
.field(TYPE, LONG)
.endObject()
.startObject(JsonMessageConstants.IS_ANSWERED)
.field(TYPE, BOOLEAN)
.endObject()
.startObject(JsonMessageConstants.IS_DELETED)
.field(TYPE, BOOLEAN)
.endObject()
.startObject(JsonMessageConstants.IS_DRAFT)
.field(TYPE, BOOLEAN)
.endObject()
.startObject(JsonMessageConstants.IS_FLAGGED)
.field(TYPE, BOOLEAN)
.endObject()
.startObject(JsonMessageConstants.IS_RECENT)
.field(TYPE, BOOLEAN)
.endObject()
.startObject(JsonMessageConstants.IS_UNREAD)
.field(TYPE, BOOLEAN)
.endObject()
.startObject(JsonMessageConstants.DATE)
.field(TYPE, IndexCreationFactory.DATE)
.field(FORMAT, "uuuu-MM-dd'T'HH:mm:ssX||uuuu-MM-dd'T'HH:mm:ssXXX||uuuu-MM-dd'T'HH:mm:ssXXXXX")
.endObject()
.startObject(JsonMessageConstants.SENT_DATE)
.field(TYPE, IndexCreationFactory.DATE)
.field(FORMAT, "uuuu-MM-dd'T'HH:mm:ssX||uuuu-MM-dd'T'HH:mm:ssXXX||uuuu-MM-dd'T'HH:mm:ssXXXXX")
.endObject()
.startObject(JsonMessageConstants.USER_FLAGS)
.field(TYPE, KEYWORD)
.field(NORMALIZER, CASE_INSENSITIVE)
.endObject()
.startObject(JsonMessageConstants.MEDIA_TYPE)
.field(TYPE, KEYWORD)
.endObject()
.startObject(JsonMessageConstants.SUBTYPE)
.field(TYPE, KEYWORD)
.endObject()
.startObject(JsonMessageConstants.FROM)
.startObject(PROPERTIES)
.startObject(JsonMessageConstants.EMailer.NAME)
.field(TYPE, JsonMessageConstants.TEXT)
.field(ANALYZER, KEEP_MAIL_AND_URL)
.endObject()
.startObject(JsonMessageConstants.EMailer.ADDRESS)
.field(TYPE, JsonMessageConstants.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(JsonMessageConstants.HEADERS)
.field(TYPE, NESTED)
.startObject(PROPERTIES)
.startObject(JsonMessageConstants.HEADER.NAME)
.field(TYPE, KEYWORD)
.endObject()
.startObject(JsonMessageConstants.HEADER.VALUE)
.field(TYPE, JsonMessageConstants.TEXT)
.field(ANALYZER, KEEP_MAIL_AND_URL)
.endObject()
.endObject()
.endObject()
.startObject(JsonMessageConstants.SUBJECT)
.field(TYPE, JsonMessageConstants.TEXT)
.field(ANALYZER, KEEP_MAIL_AND_URL)
.startObject(FIELDS)
.startObject(RAW)
.field(TYPE, KEYWORD)
.field(NORMALIZER, CASE_INSENSITIVE)
.endObject()
.endObject()
.endObject()
.startObject(JsonMessageConstants.TO)
.startObject(PROPERTIES)
.startObject(JsonMessageConstants.EMailer.NAME)
.field(TYPE, JsonMessageConstants.TEXT)
.field(ANALYZER, KEEP_MAIL_AND_URL)
.endObject()
.startObject(JsonMessageConstants.EMailer.ADDRESS)
.field(TYPE, JsonMessageConstants.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(JsonMessageConstants.CC)
.startObject(PROPERTIES)
.startObject(JsonMessageConstants.EMailer.NAME)
.field(TYPE, JsonMessageConstants.TEXT)
.field(ANALYZER, KEEP_MAIL_AND_URL)
.endObject()
.startObject(JsonMessageConstants.EMailer.ADDRESS)
.field(TYPE, JsonMessageConstants.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(JsonMessageConstants.BCC)
.startObject(PROPERTIES)
.startObject(JsonMessageConstants.EMailer.NAME)
.field(TYPE, JsonMessageConstants.TEXT)
.field(ANALYZER, KEEP_MAIL_AND_URL)
.endObject()
.startObject(JsonMessageConstants.EMailer.ADDRESS)
.field(TYPE, JsonMessageConstants.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(JsonMessageConstants.MAILBOX_ID)
.field(TYPE, KEYWORD)
.field(STORE, true)
.endObject()
.startObject(JsonMessageConstants.MIME_MESSAGE_ID)
.field(TYPE, KEYWORD)
.endObject()
.startObject(JsonMessageConstants.TEXT_BODY)
.field(TYPE, JsonMessageConstants.TEXT)
.field(ANALYZER, STANDARD)
.endObject()
.startObject(JsonMessageConstants.HTML_BODY)
.field(TYPE, JsonMessageConstants.TEXT)
.field(ANALYZER, STANDARD)
.endObject()
.startObject(JsonMessageConstants.HAS_ATTACHMENT)
.field(TYPE, BOOLEAN)
.endObject()
.startObject(JsonMessageConstants.ATTACHMENTS)
.startObject(PROPERTIES)
.startObject(JsonMessageConstants.Attachment.FILENAME)
.field(TYPE, JsonMessageConstants.TEXT)
.field(ANALYZER, STANDARD)
.endObject()
.startObject(JsonMessageConstants.Attachment.TEXT_CONTENT)
.field(TYPE, JsonMessageConstants.TEXT)
.field(ANALYZER, STANDARD)
.endObject()
.startObject(JsonMessageConstants.Attachment.MEDIA_TYPE)
.field(TYPE, KEYWORD)
.endObject()
.startObject(JsonMessageConstants.Attachment.SUBTYPE)
.field(TYPE, KEYWORD)
.endObject()
.startObject(JsonMessageConstants.Attachment.FILE_EXTENSION)
.field(TYPE, KEYWORD)
.endObject()
.startObject(JsonMessageConstants.Attachment.CONTENT_DISPOSITION)
.field(TYPE, KEYWORD)
.endObject()
.endObject()
.endObject()
.endObject()
.endObject();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}