//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.consumers;
import java.util.Map;
import org.apache.uima.fit.descriptor.ExternalResource;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.client.Requests;
import org.elasticsearch.common.xcontent.XContentBuilder;
import uk.gov.dstl.baleen.consumers.utils.AbstractElasticsearchConsumer;
import uk.gov.dstl.baleen.resources.SharedElasticsearchResource;
/**
* Output processed CAS object into Elasticsearch 2, using the schema defined in AbstractElasticsearchConsumer
*
* @baleen.javadoc
*/
public class Elasticsearch extends AbstractElasticsearchConsumer {
/**
* Connection to Elasticsearch
*
* @baleen.resource uk.gov.dstl.baleen.resources.SharedElasticsearchResource
*/
public static final String KEY_ELASTICSEARCH = "elasticsearch";
@ExternalResource(key = KEY_ELASTICSEARCH)
private SharedElasticsearchResource esResource;
@Override
public boolean createIndex() {
if(!esResource.getClient().admin().indices().exists(Requests.indicesExistsRequest(index)).actionGet().isExists()){
esResource.getClient().admin().indices()
.create(Requests.createIndexRequest(index))
.actionGet();
return true;
}
return false;
}
@Override
public void addMapping(XContentBuilder mapping) {
esResource.getClient().admin().indices()
.preparePutMapping(index)
.setType(type)
.setSource(mapping)
.execute().actionGet();
}
@Override
public void addDocument(String id, Map<String, Object> json) {
try{
esResource.getClient().prepareIndex(index, type, id).setSource(json).execute().actionGet();
}catch(ElasticsearchException ee){
getMonitor().error("Couldn't persist document to Elasticsearch", ee);
}
}
}