ElasticIndexingServiceConnector.java
/*
* Copyright (C) 2003-2015 eXo Platform SAS.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see http://www.gnu.org/licenses/ .
*/
package org.exoplatform.commons.search.index.impl;
import org.apache.commons.lang.StringUtils;
import org.json.simple.JSONObject;
import org.exoplatform.commons.search.index.IndexingServiceConnector;
import org.exoplatform.commons.utils.PropertyManager;
import org.exoplatform.container.xml.InitParams;
import org.exoplatform.container.xml.PropertiesParam;
/**
* Created by The eXo Platform SAS
* Author : Thibault Clement
* tclement@exoplatform.com
* 7/22/15
*/
public abstract class ElasticIndexingServiceConnector extends IndexingServiceConnector {
private static final Integer REPLICAS_NUMBER_DEFAULT = 0;
private static final String REPLICAS_NUMBER_PROPERTY_NAME = "exo.es.indexing.replica.number.default";
private static final Integer SHARDS_NUMBER_DEFAULT = 5;
private static final String SHARDS_PROPERTY_NAME = "exo.es.indexing.shard.number.default";
protected String indexAlias;
protected String currentIndex;
protected String previousIndex;
protected boolean reindexOnUpgrade;
protected Integer shards = SHARDS_NUMBER_DEFAULT;
protected Integer replicas = REPLICAS_NUMBER_DEFAULT;
public ElasticIndexingServiceConnector(InitParams initParams) {
PropertiesParam param = initParams.getPropertiesParam("constructor.params");
String reindexOnUpgradeString = param.getProperty("reindexOnUpgrade");
this.reindexOnUpgrade = StringUtils.isNotBlank(reindexOnUpgradeString) && reindexOnUpgradeString.trim().equalsIgnoreCase("true");
this.indexAlias = param.getProperty("index_alias");
this.currentIndex = param.getProperty("index_current");
this.previousIndex = param.getProperty("index_previous");
setType(param.getProperty("type"));
//Get number of replicas in connector declaration or exo properties
if (StringUtils.isNotBlank(param.getProperty("replica.number"))) {
this.replicas = Integer.valueOf(param.getProperty("replica.number"));
}
else if (StringUtils.isNotBlank(PropertyManager.getProperty(REPLICAS_NUMBER_PROPERTY_NAME))) {
this.replicas = Integer.valueOf(PropertyManager.getProperty(REPLICAS_NUMBER_PROPERTY_NAME));
}
//Get number of shards in connector declaration or exo properties
if (StringUtils.isNotBlank(param.getProperty("shard.number"))) {
this.shards = Integer.valueOf(param.getProperty("shard.number"));
}
else if (StringUtils.isNotBlank(PropertyManager.getProperty(SHARDS_PROPERTY_NAME))) {
this.shards = Integer.valueOf(PropertyManager.getProperty(SHARDS_PROPERTY_NAME));
}
}
/**
*
* Default mapping rules for ES type
* {
"type_name" : {
"properties" : {
"permissions" : {"type" : "keyword"},
"sites" : {"type" : "keyword"}
}
}
}
*
* This method must be overridden by your specific connector if you want to define special mapping
*
* @return JSON containing a mapping to create new type
*
*/
public String getMapping() {
JSONObject notAnalyzedField = new JSONObject();
notAnalyzedField.put("type", "text");
notAnalyzedField.put("index", false);
JSONObject keywordMapping = new JSONObject();
keywordMapping.put("type", "keyword");
JSONObject properties = new JSONObject();
properties.put("permissions", keywordMapping);
properties.put("sites", keywordMapping);
properties.put("url", notAnalyzedField);
JSONObject mappingProperties = new JSONObject();
mappingProperties.put("properties",properties);
JSONObject mappingJSON = new JSONObject();
mappingJSON.put(getType(), mappingProperties);
return mappingJSON.toJSONString();
}
public String getIndex() {
return indexAlias;
}
public void setIndex(String index) {
this.indexAlias = index;
}
public String getCurrentIndex() {
return currentIndex;
}
public String getPreviousIndex() {
return previousIndex;
}
public void setPreviousIndex(String previousIndex) {
this.previousIndex = previousIndex;
}
public boolean isReindexOnUpgrade() {
return reindexOnUpgrade;
}
public Integer getShards() {
return shards;
}
public void setShards(Integer shards) {
this.shards = shards;
}
public Integer getReplicas() {
return replicas;
}
public void setReplicas(Integer replicas) {
this.replicas = replicas;
}
@Override
public String delete(String id) {
return id;
}
public boolean isNeedIngestPipeline() {
return false;
}
public String getPipelineName() {
return null;
}
public String getAttachmentProcessor() {
return null;
}
}