spring4 integrates elasticsearch5

 For example, how to integrate elasticsearch in spring web project? 

(Refer to the github project: https://github.com/spring-projects/spring-data-elasticsearch)

1. Introduce spring-elasticsearch.xml into spring.xml

<!-- spring-elasticsearch.xml import -->
<import resource="classpath:spring-elasticsearch.xml"/>

Second, the TransportClientFactoryBean extension class and spring-elasticsearch.xml configuration 

TransportClientFactoryBean.java custom extension class 

public class TransportClientFactoryBean implements FactoryBean<TransportClient>, InitializingBean, DisposableBean {
    private static final Logger logger = Logger.getLogger(TransportClientFactoryBean.class);
    private String clusterNodes = "127.0.0.1:9300";//You can use commas to separate multiple node addresses
    private String clusterName = "elasticsearch";
     
    private Boolean clientTransportSniff = true;
    private Boolean clientIgnoreClusterName = Boolean.FALSE;
    private String clientPingTimeout = "5s";
    private String clientNodesSamplerInterval = "5s";
    private TransportClient client;
    private Properties properties;
    static final String COLON = ":";//分号
    static final String COMMA = ",";//Comma
     
 
    @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() throws Exception {
 
        client = new PreBuiltTransportClient(settings());
        Assert.hasText(clusterNodes, "[Assertion failed] clusterNodes settings missing.");
        for (String clusterNode : StringUtils.split(clusterNodes, COMMA)) {
            String hostName = StringUtils.substringBeforeLast(clusterNode, COLON);
            String port = StringUtils.substringAfterLast(clusterNode, COLON);
            Assert.hasText(hostName, "[Assertion failed] missing host name in 'clusterNodes'");
            Assert.hasText(port, "[Assertion failed] missing port in 'clusterNodes'");
            logger.info("adding transport node : " + clusterNode);
            client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(hostName), Integer.valueOf(port)));
        }
        client.connectedNodes();
    }
 
    private Settings settings() {
        if (properties != null) {
            return Settings.builder().put(properties).build();
        }
        return Settings.builder()
                .put("cluster.name", clusterName)
                .put("client.transport.sniff", clientTransportSniff)
                .put("client.transport.ignore_cluster_name", clientIgnoreClusterName)
                .put("client.transport.ping_timeout", clientPingTimeout)
                .put("client.transport.nodes_sampler_interval", clientNodesSamplerInterval)
                .build();
    }
 
    public void setClusterNodes(String clusterNodes) {
        this.clusterNodes = clusterNodes;
    }
 
    public void setClusterName(String clusterName) {
        this.clusterName = clusterName;
    }
 
    public void setClientTransportSniff(Boolean clientTransportSniff) {
        this.clientTransportSniff = clientTransportSniff;
    }
 
    public String getClientNodesSamplerInterval() {
        return clientNodesSamplerInterval;
    }
 
    public void setClientNodesSamplerInterval(String clientNodesSamplerInterval) {
        this.clientNodesSamplerInterval = clientNodesSamplerInterval;
    }
 
    public String getClientPingTimeout() {
        return clientPingTimeout;
    }
 
    public void setClientPingTimeout(String clientPingTimeout) {
        this.clientPingTimeout = clientPingTimeout;
    }
 
    public Boolean getClientIgnoreClusterName() {
        return clientIgnoreClusterName;
    }
 
    public void setClientIgnoreClusterName(Boolean clientIgnoreClusterName) {
        this.clientIgnoreClusterName = clientIgnoreClusterName;
    }
 
    public void setProperties(Properties properties) {
        this.properties = properties;
    }
 
}

Three, elasticsearch.properties property configuration

elasticsearch.clusterName=myES
elasticsearch.clusterNodes=192.168.1.140:9300

Fourth, pom.xml configuration 

<!-- es5.5.2 jar -->
    <dependency>
     <groupid>org.elasticsearch.client</groupid>
        <artifactid>transport</artifactid>
        <version>5.5.2</version>
    </dependency>

 5. How to use

      @Resource can be injected into TransportClient tranportClient


Six, (optional) elasticsearch basic CRUD packaging class

     ElasticSearchBaseDao.java

/**
 * elasticsearch underlying CRUD encapsulation dao
 * @author jelly
 */
@Component
public class ElasticSearchBaseDao {
 
     @Resource
     private TransportClient transportClient ;
     
       /**
        * index an object
        * @param index index name
        * @param type index type
        * @param id The document id can be null, the put method needs to specify the document id, the post does not need to specify the id, the server automatically generates
        * @param o  
        * @return String
        * @author jelly
        *
        */
     public  <t>   String   index(String index,String type,String id ,T o){
              
            IndexResponse res=transportClient.prepareIndex(index, type, id)
                         .setSource(JSON.toJSONString(o), XContentType.JSON).get();
              
            return res.toString();
     }
      
      
         
     /**
      * Query an object by id
      * @param index
      * @param type
      * @param id
      * @param entityClass
      * @return T
      * @author jelly
      *
      */
     public <t> T findById(String index,String type,String id, Class<t> entityClass){
          GetResponse res= transportClient.prepareGet(index, type, id).execute().actionGet();
          return JSON.parseObject(res.getSourceAsString(), entityClass) ;
    }
      
    /**
     * delete an object by id
     * @param index
     * @param type
     * @param id
     * @return String
     * @author jelly
     *
     */
    public  String   deleteById(String index,String type,String id ){
         DeleteResponse res = transportClient.prepareDelete(index, type, id).execute().actionGet();
        return  res.toString();
           
    }
     
    /**
     * update an object
     * @param index
     * @param type
     * @param id
     * @param o
     * @return
     * @return String
     * @author jelly
     *
     */
    public <t> String  update(String index,String type, String id  , T o){
     
        UpdateResponse res= transportClient.prepareUpdate(index, type, id)
.setDoc(JSON.toJSONString(o), XContentType.JSON).get();
          
        return res.toString();
    }
     
     
     
    /**
     * query all
     * @param index
     * @param type
     * @param entityClass
     * @return List<t>
     * @author jelly
     *
     */
    public <t> List<t>  findAll(String index,String type,Class<t> entityClass){
        SearchRequestBuilder srb=transportClient.prepareSearch(index).setTypes(type);
        SearchResponse sr=srb.setQuery(QueryBuilders.matchAllQuery())
                .execute()
                .actionGet();
        SearchHits hits=sr.getHits();
        List<t> list =new ArrayList<t>();
        for(SearchHit hit:hits){
             
            T o=  JSON.parseObject(hit.getSourceAsString(), entityClass);
            list.add(o);
        }
         return list ;
    }
     
    /**
     * Query all pages
     * @param index
     * @param type
     * @param page
     * @param entityClass
     * @return List<t>
     * @author jelly
     *
     */
    public <t> List<t>  findAllByPage(String index,String type,Page page ,Class<t> entityClass){
        SearchRequestBuilder srb=transportClient.prepareSearch(index).setTypes(type);
        SearchResponse sr=srb.setQuery(QueryBuilders.matchAllQuery())
                .setFrom(page.getStartNum())
                .setSize(page.getPageSize())
                .execute()
                .actionGet();
        SearchHits hits=sr.getHits();
        List<t> list =new ArrayList<t>();
        for(SearchHit hit:hits){
             
            T o=  JSON.parseObject(hit.getSourceAsString(), entityClass);
            list.add(o);
        }
        return list ;
    }
     
    /**
     * Query all pagination sorting     
     * @param index
     * @param type
     * @param page
     * @param entityClass
     * @return
     * @return List<t>
     * @author jelly
     *
     */
    public  <t> List<t> findAllByPageSort(String index,String type,Page page,Class<t> entityClass){
         
        SearchRequestBuilder srb=transportClient.prepareSearch(index).setTypes(type);
         
        SearchResponse sr=null;
        if(page.getSortOrder().equalsIgnoreCase("asc")){//升序
            sr=srb.setQuery(QueryBuilders.matchAllQuery())
                    .addSort(page.getSortName(), SortOrder.ASC)
                    .setFrom(page.getStartNum())
                    .setSize(page.getPageSize())
                    .execute()
                    .actionGet();
        }else {
            sr=srb.setQuery(QueryBuilders.matchAllQuery())
                    .addSort(page.getSortName(), SortOrder.DESC)  //降序
                    .setFrom(page.getStartNum())
                    .setSize(page.getPageSize())
                    .execute()
                    .actionGet();
        }
        SearchHits hits=sr.getHits();
        List<t> list =new ArrayList<t>();
        for(SearchHit hit:hits){
            T o=  JSON.parseObject(hit.getSourceAsString(), entityClass);
            list.add(o);
        }
        return list ;
          
    }
     
    /**
     * The query contains the specified column
     * @param index
     * @param type
     * @param page
     * @param fields
     * @param entityClass
     * @return List<t>
     * @author jelly
     *
     */
    public  <t> List<t>  findIncludeFieldByPage(String index,String type,Page page,String[] fields, Class<t> entityClass){
        SearchRequestBuilder srb=transportClient.prepareSearch(index).setTypes(type);
        SearchRequestBuilder builder = srb.setQuery(QueryBuilders.matchAllQuery())
                .setFrom(page.getStartNum())
                .setSize(page.getPageSize())
                .setFetchSource(fields, null);  // includes   excludes
        String  sortName =page.getSortName();
        String sortOrder =page.getSortOrder();
         if(sortName!=null && !sortName.equals("")&& sortOrder!=null && !sortOrder.equals("")){
             if(sortOrder.equalsIgnoreCase("asc")){
                 builder.addSort(sortName, SortOrder.ASC);
             }else{
                 builder.addSort(sortName, SortOrder.DESC);
             }
         }     
         SearchResponse sr =   builder.execute().actionGet();
         SearchHits hits=sr.getHits();
            List<t> list =new ArrayList<t>();
            for(SearchHit hit:hits){
                T o=  JSON.parseObject(hit.getSourceAsString(), entityClass);
                list.add(o);
            }
         return list ;
    }
     
    /**
     * The query excludes the specified column
     * @param index
     * @param type
     * @param page
     * @param fields
     * @param entityClass
     * @return List<t>
     */
    public  <t> List<t>  findExcludeFieldByPage(String index,String type,Page page,String[] fields, Class<t> entityClass){
        SearchRequestBuilder srb=transportClient.prepareSearch(index).setTypes(type);
        SearchRequestBuilder builder = srb.setQuery(QueryBuilders.matchAllQuery())
                .setFrom(page.getStartNum())
                .setSize(page.getPageSize())
                .setFetchSource(null, fields);  // includes   excludes
        String  sortName =page.getSortName();
        String sortOrder =page.getSortOrder();
        if(sortName!=null && !sortName.equals("")&& sortOrder!=null && !sortOrder.equals("")){
            if(sortOrder.equalsIgnoreCase("asc")){
                builder.addSort(sortName, SortOrder.ASC);
            }else{
                builder.addSort(sortName, SortOrder.DESC);
            }
        }      
        SearchResponse sr =   builder.execute().actionGet();
        SearchHits hits=sr.getHits();
        List<t> list =new ArrayList<t>();
        for(SearchHit hit:hits){
            T o=  JSON.parseObject(hit.getSourceAsString(), entityClass);
            list.add(o);
        }
        return list ;
    }
    /**
     * Keyword search
     * @param index
     * @param type
     * @param page
     * @param includes
     * @param field
     * @param keyword
     * @param analyzer
     * @param entityClass
     * @return List<t>
     * @author jelly
     *
     */
    public <t> List<t> searchByFieldKeyword(String index,String type,Page page ,String[] includes,
            String field,String keyword,String analyzer ,Class<t> entityClass) {
        SearchRequestBuilder srb=transportClient.prepareSearch(index).setTypes(type);
        SearchRequestBuilder builder = srb.setQuery(QueryBuilders.matchQuery(field,keyword)
                .analyzer(analyzer))
                .setFrom(page.getStartNum())
                .setSize(page.getPageSize())
                .setFetchSource(includes, null);  // includes   excludes
        SearchResponse sr =   builder.execute().actionGet();
        SearchHits hits=sr.getHits();
        List<t> list =new ArrayList<t>();
        for(SearchHit hit:hits){
            T o=  JSON.parseObject(hit.getSourceAsString(), entityClass);
            list.add(o);
        }
        return list ;
    }
     
}

  ok!!




Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325769475&siteId=291194637