//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.consumers; import java.io.IOException; import java.util.Map; import org.apache.uima.fit.descriptor.ExternalResource; import org.elasticsearch.common.xcontent.XContentBuilder; import io.searchbox.client.JestClient; import io.searchbox.client.JestResult; import io.searchbox.core.Index; import io.searchbox.indices.CreateIndex; import io.searchbox.indices.IndicesExists; import io.searchbox.indices.mapping.PutMapping; import uk.gov.dstl.baleen.consumers.utils.AbstractElasticsearchConsumer; import uk.gov.dstl.baleen.resources.SharedElasticsearchRestResource; /** * Use the Elasticsearch REST API to save processed documents, using the schema defined in AbstractElasticsearchConsumer. * * Because we use the REST API, this should be compatible with both Elasticsearch 1.x and Elasticsearch 2.x. * * @baleen.javadoc */ public class ElasticsearchRest extends AbstractElasticsearchConsumer { /** * Connection to Elasticsearch * * @baleen.resource uk.gov.dstl.baleen.resources.SharedElasticsearchRestResource */ public static final String KEY_ELASTICSEARCH_REST = "elasticsearchRest"; @ExternalResource(key = KEY_ELASTICSEARCH_REST) private SharedElasticsearchRestResource esrResource; @Override public boolean createIndex() { JestClient client = esrResource.getClient(); try{ JestResult result = client.execute(new IndicesExists.Builder(index).build()); if(result.getResponseCode() != 200){ client.execute(new CreateIndex.Builder(index).build()); return true; } }catch(IOException ioe){ getMonitor().error("Unable to create index", ioe); } return false; } @Override public void addMapping(XContentBuilder mapping) { try{ PutMapping putMapping = new PutMapping.Builder(index, type, mapping.string()).build(); esrResource.getClient().execute(putMapping); }catch(IOException ioe){ getMonitor().error("Unable to add mapping to index", ioe); } } @Override public void addDocument(String id, Map<String, Object> json) { try{ Index doc = new Index.Builder(json).id(id).index(index).type(type).build(); esrResource.getClient().execute(doc); }catch(IOException ioe){ getMonitor().error("Couldn't persist document to Elasticsearch", ioe); } } }