springboot連接elasticsearch

  1. springboot版本:1.5.9     elasticsearch版本:5.6.1    jdk:1.8

  2. pom.xml添加elasticsearch依賴

      <properties>
        <log4j-api.version>2.8.2</log4j-api.version>
        <log4j-core.version>2.8.2</log4j-core.version>
        <elasticsearch.version>5.6.1</elasticsearch.version>
        <transport.version>5.6.1</transport.version>
    </properties>
    <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-api</artifactId>
         <version>${log4j-api.version}</version>
      </dependency>
      <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-core</artifactId>
         <version>${log4j-core.version}</version>
      </dependency>
      <dependency>
         <groupId>org.elasticsearch</groupId>
         <artifactId>elasticsearch</artifactId>
         <version>${elasticsearch.version}</version>
      </dependency>
      <dependency>
         <groupId>org.elasticsearch.client</groupId>
         <artifactId>transport</artifactId>
         <version>${transport.version}</version>
      </dependency>
    </dependencies>
  3. application.properties添加elasticsearch配置
    spring.data.elasticsearch.cluster-name=elasticsearch
    spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
  4. 添加elasticsearch配置文件ElasticsearchConfiguration
    package com.example.demo.config;
    import org.elasticsearch.client.transport.TransportClient;
    import org.elasticsearch.common.settings.Settings;
    import org.elasticsearch.common.transport.InetSocketTransportAddress;
    import org.elasticsearch.transport.client.PreBuiltTransportClient;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.DisposableBean;
    import org.springframework.beans.factory.FactoryBean;
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Configuration;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    /**
    * @Author 馮戰魁
    * @Date 2018/3/13 下午5:55
    */
    @Configuration
    public class ElasticsearchConfiguration implements FactoryBean<TransportClient>, InitializingBean, DisposableBean {
       private static final Logger logger = LoggerFactory.getLogger(ElasticsearchConfiguration.class);
       @Value("${spring.data.elasticsearch.cluster-nodes}")
       private String clusterNodes ;

       @Value("${spring.data.elasticsearch.cluster-name}")
       private String clusterName;

       private TransportClient client;

       @Override
       public void destroy() throws Exception {
           try {
               logger.info("Closing elasticSearch client");
               if (client != null) {
                   client.close();
               }
           } catch (final Exception e) {
               logger.error("Error closing ElasticSearch client: ", e);
           }
       }

       @Override
       public TransportClient getObject() throws Exception {
           return client;
       }

       @Override
       public Class<TransportClient> getObjectType() {
           return TransportClient.class;
       }

       @Override
       public boolean isSingleton() {
           return false;
       }

       @Override
       public void afterPropertiesSet() throws Exception {
           buildClient();
       }

       protected void buildClient()  {
           try {
               PreBuiltTransportClient  preBuiltTransportClient = new PreBuiltTransportClient(settings());
               if (!"".equals(clusterNodes)){
                   for (String nodes:clusterNodes.split(",")) {
                       String InetSocket [] = nodes.split(":");
                       String  Address = InetSocket[0];
                       Integer  port = Integer.valueOf(InetSocket[1]);
                       preBuiltTransportClient.addTransportAddress(new
                               InetSocketTransportAddress(InetAddress.getByName(Address),port ));
                   }
                   client = preBuiltTransportClient;
               }
           } catch (UnknownHostException e) {
               logger.error(e.getMessage());
           }
       }
       /**
        * 初始化默認的client
        */
       private Settings settings(){
           Settings settings = Settings.builder()
                   .put("cluster.name",clusterName)
                   .put("client.transport.sniff",true)
           .build();
           client = new PreBuiltTransportClient(settings);
           return settings;
       }
    }
  5. 添加測試接口,本例的Index是information,type是article
    package com.example.demo.controller;

    import org.elasticsearch.action.get.GetResponse;
    import org.elasticsearch.action.index.IndexResponse;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.action.search.SearchType;
    import org.elasticsearch.client.transport.TransportClient;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.search.SearchHit;
    import org.elasticsearch.search.SearchHits;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    /**
    * @Author 馮戰魁
    * @Date 2018/3/9 下午12:13
    */
    @RestController
    @RequestMapping("/es")
    public class ElasticsearchController {
       @Autowired
       private TransportClient client;
    //    獲取單條記錄
       @RequestMapping("/get")
       public GetResponse hello(){
           GetResponse response = client.prepareGet("information", "article", "1").get();
           return response;
       }
    //    插入數據
       @RequestMapping("/save")
       public String save(){
           Map map = new HashMap<String,Object>();
           map.put("id","2");
           map.put("name","hehe");
           map.put("age",18);
           IndexResponse response = client.prepareIndex("information", "article",map.get("id").toString())
                   .setSource(map).execute().actionGet();
           return response.getId();
       }
    //    查詢搜索
       @RequestMapping("/search")
       public List<String> search(){
           SearchResponse response = client.prepareSearch("information")
                   .setTypes("article")
                   .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
    //                .setQuery(QueryBuilders.termQuery("name", "feng"))                 // Query
                   .setPostFilter(QueryBuilders.rangeQuery("age").from(0).to(188))     // Filter
                   .setFrom(0).setSize(60).setExplain(true)
                   .get();
    //        SearchResponse response =client.prepareSearch().execute().actionGet();
           SearchHits searchHits = response.getHits();
           System.err.println("總數:"+searchHits.getTotalHits());
           List<String> data = new ArrayList<String>();
           SearchHit[] hits = searchHits.getHits();
           for (SearchHit hit : hits) {
               String json = hit.getSourceAsString();
               data.add(json);
               System.err.println(json);
           }
           return data;
       }

    }
  6. 啓動elasticsearch和springboot,訪問測試接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章