Git Repositories

Typo
[xerox-elastic-poc.git] / src / main / java / com / viseo / xerox / elastic / ESRequest.java
1 package com.viseo.xerox.elastic;
2
3 import org.apache.commons.io.IOUtils;
4 import org.apache.http.HttpResponse;
5 import org.apache.http.client.HttpClient;
6 import org.apache.http.client.methods.HttpDelete;
7 import org.apache.http.client.methods.HttpGet;
8 import org.apache.http.client.methods.HttpPost;
9 import org.apache.http.client.methods.HttpPut;
10 import org.apache.http.client.utils.URIBuilder;
11 import org.apache.http.entity.StringEntity;
12 import org.apache.http.impl.client.HttpClientBuilder;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15
16 import java.io.IOException;
17 import java.io.InputStream;
18 import java.net.URISyntaxException;
19 import java.nio.charset.StandardCharsets;
20 import java.util.List;
21
22 public class ESRequest {
23
24     private final String url;
25     private static final Logger LOG = LoggerFactory.getLogger(ESRequest.class);
26     private String description;
27
28     public ESRequest(String url) {
29         this.url = url;
30         this.description = "";
31     }
32
33     private HttpClient getClient() {
34         return HttpClientBuilder.create().build();
35     }
36
37     private void printResultStatus(HttpResponse response) {
38         LOG.info(description + "  → " + response.getStatusLine());
39         description = "";
40     }
41
42     private void printAction(String description) {
43         this.description = description;
44     }
45
46     private StringEntity getEntity(String json) {
47         return new StringEntity(json, StandardCharsets.UTF_8);
48     }
49
50     public void dropIndex(String indexName) throws IOException {
51         printAction(String.format("Dropping index %s…", indexName));
52         HttpDelete delete = new HttpDelete(String.format("%s/%s", url, indexName));
53         HttpResponse response = getClient().execute(delete);
54         printResultStatus(response);
55     }
56
57     public void createIndex(String jsonIndex, String indexName) throws IOException {
58         printAction(String.format("Creating index %s…", indexName));
59         HttpPut put = new HttpPut(String.format("%s/%s", url, indexName));
60         put.setEntity(getEntity(jsonIndex));
61         HttpResponse response = getClient().execute(put);
62         printResultStatus(response);
63     }
64
65     public void paramMapping(String jsonMapping, String indexName, String typeName) throws IOException {
66         printAction(String.format("Setting mappings for %s/%s…", indexName, typeName));
67         HttpPut put = new HttpPut(String.format("%s/%s/_mapping/%s", url, indexName, typeName));
68         put.setEntity(getEntity(jsonMapping));
69         HttpResponse response = getClient().execute(put);
70         printResultStatus(response);
71     }
72
73     public void index(String json, String indexName, String typeName, Long id) throws IOException {
74         printAction(String.format("Indexing %s/%s/%d…", indexName, typeName, id));
75         HttpPut put = new HttpPut(String.format("%s/%s/%s/%d", url, indexName, typeName, id));
76         put.setEntity(getEntity(json));
77         HttpResponse response = getClient().execute(put);
78         printResultStatus(response);
79     }
80
81     public void bulkIndex(List<String[]> jsonTuples) throws IOException {
82         printAction(String.format("Bulk indexing %d documents…", jsonTuples.size()));
83         HttpPost post = new HttpPost(String.format("%s/_bulk", url));
84         StringBuilder jsonList = new StringBuilder();
85         for (String[] jsonTuple : jsonTuples) {
86             jsonList.append(jsonTuple[0]).append("\n");
87             jsonList.append(jsonTuple[1]).append("\n");
88         }
89         post.setEntity(getEntity(jsonList.toString()));
90         HttpResponse response = getClient().execute(post);
91         printResultStatus(response);
92     }
93
94     public String find(String jsonRequest, String indexName, String queryString) throws URISyntaxException, IOException {
95         printAction(String.format("Querying %s with « %s »…", indexName, queryString));
96         HttpGet get = new HttpGet(new URIBuilder(String.format("%s/%s/_search", url, indexName)).addParameter("source", jsonRequest).build());
97         LOG.debug("{}\n{}", get.getURI().getPath(), jsonRequest);
98         HttpResponse response = getClient().execute(get);
99         printResultStatus(response);
100         InputStream content = response.getEntity().getContent();
101         String result = IOUtils.toString(content, StandardCharsets.UTF_8.name());
102         LOG.debug("Result:\n{}", result);
103         return result;
104     }
105 }