View Javadoc

1   /*
2    * Copyright (c) 2002-2014, Mairie de Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.elasticsearch.modules.statsfilter.service;
35  
36  import fr.paris.lutece.portal.service.util.AppLogService;
37  
38  import org.elasticsearch.action.ActionFuture;
39  import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
40  import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequestBuilder;
41  import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;
42  import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
43  
44  import org.elasticsearch.client.Client;
45  
46  import org.elasticsearch.common.xcontent.XContentBuilder;
47  import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
48  
49  import java.io.IOException;
50  import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
51  import org.elasticsearch.indices.IndexAlreadyExistsException;
52  
53  /**
54   *
55   * @author pierre
56   */
57  public class ElasticsearchUtils
58  {
59  
60      public static void createIndex(Client client, String strIndex, String strDocumentType)
61      {
62          try
63          {
64              XContentBuilder mappingBuilder = jsonBuilder().startObject().startObject(strDocumentType)
65                      .startObject("_timestamp").field("enabled", "true").endObject()
66                      .endObject().endObject();
67              System.out.println(mappingBuilder.string());
68  
69              CreateIndexRequestBuilder createIndexRequestBuilder = client.admin().indices().prepareCreate(strIndex);
70              createIndexRequestBuilder.addMapping(strDocumentType, mappingBuilder);
71              CreateIndexResponse createIndexResponse = createIndexRequestBuilder.execute().actionGet( Constants.TIMEOUT );
72  
73              if (createIndexResponse != null && createIndexResponse.isAcknowledged())
74              {
75                  AppLogService.info("Elasticsearch index : '" + strIndex + "' created for document type : '"
76                          + strDocumentType + "'");
77              }
78              else
79              {
80                  AppLogService.info("Elasticsearch failed to create index : '" + strIndex + "' !");
81              }
82  
83          }
84          catch (IndexAlreadyExistsException e)
85          {
86              AppLogService.info("Elasticsearch index : '" + strIndex + "' already exists !"  );      
87          }
88          catch (IOException ex)
89          {
90              AppLogService.error("Error creating Elasticsearch index", ex);
91          }
92      }
93  
94      public static void deleteIndex(Client client, String strIndex)
95      {
96          DeleteIndexRequestBuilder deleteIndex = client.admin().indices().prepareDelete(strIndex);
97          deleteIndex.execute().actionGet();
98          AppLogService.info("Elasticsearch index '" + strIndex + "' deleted !");
99      }
100 
101     public static boolean isIndexExist(Client client, String strIndex)
102     {
103         ActionFuture<IndicesExistsResponse> exists = client.admin().indices()
104                 .exists(new IndicesExistsRequest(strIndex));
105         IndicesExistsResponse actionGet = exists.actionGet();
106 
107         return actionGet.isExists();
108     }
109 }