SpringBoot集成ElasticSearch详解

1.pom.xml添加

<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.6.9</version>
            <exclusions>
                <exclusion>
                    <artifactId>log4j-core</artifactId>
                    <groupId>org.apache.logging.log4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
		<dependency>
            <artifactId>log4j-core</artifactId>
            <groupId>org.apache.logging.log4j</groupId>
            <version>${log4j-core-version}</version>
        </dependency>
		 <dependency>
            <groupId>org.elasticsearch.plugin</groupId>
            <artifactId>transport-netty4-client</artifactId>
            <version>5.6.9</version>
            <exclusions>
                <exclusion>
                    <artifactId>log4j-core</artifactId>
                    <groupId>org.apache.logging.log4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>5.6.9</version>
        </dependency>

2.application.yml添加

elasticsearch:
  index: shehuizuzhi_test3
  cluster-name: es6.3
  cluster-ip: xxx.xxx.com
  cluster-port: 9331
  cluster-nodes: xxx.xxx.com:9221
  local: false
  repositories:
    enabled: true

3.Controller

package com.zkdj.api.controller;

import cn.hutool.core.util.StrUtil;
import com.zkdj.api.bean.secondary.PageVO;
import com.zkdj.api.entity.SheHuiZuZhiEntity;
import com.zkdj.api.service.ESInfoService;
import com.zkdj.api.vo.SheHuiZuZhiVo;
import com.zkdj.common.bean.CommonResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

/**
 * ES下的 协会/渠道 模块接口
 */
@Api("ES->AssociationController")
@RestController
@RequestMapping("/api/es/association")
public class ESController {
    @Autowired
    private ESInfoService eSInfoService;

    /**
     * 渠道/社会组织
     * @Description 获取渠道/社会组织列表
     * @param vo
     * @return
     */
    @ApiOperation(value = "ES渠道/社会组织列表", httpMethod = "POST")
    @RequestMapping("list/V2")
    public CommonResult serachList(@RequestBody SheHuiZuZhiVo vo) {
        try {
            PageVO<SheHuiZuZhiEntity> pageVO = this.eSInfoService.searchList(vo);
            return CommonResult.success(pageVO);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return CommonResult.failed("系统错误!");
    }


    /**
     * 单个省渠道数据
     * @param vo 查询条件
     * @param field 统计字段
     * @return
     */
    @ApiOperation("渠道区域统计图")
    @PostMapping("/one/{field}")
    public CommonResult one(@RequestBody SheHuiZuZhiVo vo, @ApiParam(value = "统计维度")@PathVariable(name = "field") String field){
        try {

            List<String[]> data  =  eSInfoService.aggrBidinfo(vo,field);
            List<List<String>> dataMap=new ArrayList<>();//地图
            if (vo.getSheng()==null||vo.getSheng()==""){
                for (int i = 0; i < data.size(); i++) {
                    String key1 = data.get(i)[0];
                    String value1 = data.get(i)[1];
                    //地图
                    if (key1.equals("-")) continue;
                    List<String> kv=new ArrayList<>();
                    kv.add(key1);
                    kv.add(value1);
                    dataMap.add(kv);
                }
            }else{
                for (int i = 0; i < data.size(); i++) {
                    SheHuiZuZhiVo bidVo = new SheHuiZuZhiVo();
                    bidVo.setSheng(vo.getSheng());
                    PageVO<SheHuiZuZhiEntity> pageVO = this.eSInfoService.SHZZSearchList(bidVo);
                    List<String> kv=new ArrayList<>();
//                    if (data.get(i)[0].equals(vo.getSheng().replaceAll("市","").replaceAll("省",""))){
                    if (data.get(i)[0].equals(vo.getSheng())){
                        kv.add(data.get(i)[0]);
                        kv.add(pageVO.getTotal()+"");
                        //地图
                        dataMap.add(kv);
                    }
                }
            }
            return CommonResult.success(dataMap);
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.failed();
        }
    }
    /**
     * 渠道产业统计图
     * @param vo 查询条件
     * @param field 统计字段
     * @return
     */
    @ApiOperation("渠道产业统计图")
    @PostMapping("/pieIndustry/{field}")
    public CommonResult pieIndustry(@RequestBody SheHuiZuZhiVo vo, @ApiParam(value = "统计维度")@PathVariable(name = "field") String field){
        try {

            List<String[]> data  =  eSInfoService.aggrBidinfo(vo,field);
            List<List<String>> dataMap=new ArrayList<>();//地图
            if (vo.getQdcy()==null||vo.getQdcy()==""){
                for (int i = 0; i < data.size(); i++) {
                    String key1 = data.get(i)[0];
                    String value1 = data.get(i)[1];
                    //地图
                    if (key1.equals("-")||key1.contains(",")) continue;
                    List<String> kv=new ArrayList<>();
                    kv.add(key1);
                    kv.add(value1);
                    dataMap.add(kv);
                }
            }else{
                for (int i = 0; i < data.size(); i++) {
                    SheHuiZuZhiVo bidVo = new SheHuiZuZhiVo();
                    bidVo.setQdcy(vo.getQdcy());
                    PageVO<SheHuiZuZhiEntity> pageVO = this.eSInfoService.SHZZSearchList(bidVo);
                    List<String> kv=new ArrayList<>();
//                    if (data.get(i)[0].equals(vo.getSheng().replaceAll("市","").replaceAll("省",""))){
                    if (data.get(i)[0].equals(vo.getSheng())){
                        kv.add(data.get(i)[0]);
                        kv.add(pageVO.getTotal()+"");
                        //地图
                        dataMap.add(kv);
                    }
                }
            }
            return CommonResult.success(dataMap);
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.failed();
        }
    }
    /**
     * 渠道类型统计图
     * @param vo 查询条件
     * @return
     */
    @ApiOperation("渠道类型统计图")
    @PostMapping("/pieType/{field}")
    public CommonResult pieType(@RequestBody SheHuiZuZhiVo vo, @ApiParam(value = "统计维度")@PathVariable(name = "field") String field){
        try {

            List<String[]> data  =  eSInfoService.aggrBidinfo(vo,field);
            List<List<String>> dataMap=new ArrayList<>();//地图
            if (vo.getQdlx()==null||vo.getQdlx()==""){
                for (int i = 0; i < data.size(); i++) {
                    String key1 = data.get(i)[0];
                    String value1 = data.get(i)[1];
                    //地图
                    if (key1.equals("-")) continue;
                    List<String> kv=new ArrayList<>();
                    kv.add(key1);
                    kv.add(value1);
                    dataMap.add(kv);
                }
            }else{
                for (int i = 0; i < data.size(); i++) {
                    SheHuiZuZhiVo bidVo = new SheHuiZuZhiVo();
                    bidVo.setQdlx(vo.getQdlx());
                    PageVO<SheHuiZuZhiEntity> pageVO = this.eSInfoService.SHZZSearchList(bidVo);
                    List<String> kv=new ArrayList<>();
                    if (data.get(i)[0].equals(vo.getQdlx())){
                        kv.add(data.get(i)[0]);
                        kv.add(pageVO.getTotal()+"");
                        dataMap.add(kv);
                    }
                }
            }
            return CommonResult.success(dataMap);
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.failed();
        }
    }

    /**
     * 渠道分布
     * @param vo 查询条件
     * @param field 统计字段
     * @return
     */
    @ApiOperation("渠道分布")
    @PostMapping("/groupByField/{field}")
    public CommonResult groupByField(@RequestBody SheHuiZuZhiVo vo, @ApiParam(value = "统计维度")@PathVariable(name = "field") String field){
        try {
            List<String[]> data  =  eSInfoService.aggrBidinfo(vo,field);
            List<List<String>> dataMap=new ArrayList<>();//地图
            if (vo.getQdlx()==null||vo.getQdlx()=="") {
                for (int i = 0; i < data.size(); i++) {
                    String key1 = data.get(i)[0];
                    String value1 = data.get(i)[1];
                    //地图
                    if (key1.equals("-")) continue;
                    List<String> kv = new ArrayList<>();
                    kv.add(key1);
                    kv.add(value1);
                    dataMap.add(kv);
                }
            }
            return CommonResult.success(dataMap);
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.failed();
        }
    }

    /**
     * 协会详情信息
     *
     * @return
     */
    @ApiOperation(value = "协会详情",httpMethod = "POST")
    @PostMapping("queryDetails")
    public CommonResult queryDetails(@RequestParam(value = "id") String id) {
        if ("".equals(id) || StrUtil.isBlank(id)) {
            return CommonResult.validateFailed("id错误!");
        }
        try {
            return CommonResult.success(eSInfoService.getByIds(id));
//            return  CommonResult.success(this.biddingService.queryBiddingById(id));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return CommonResult.failed("查询异常");
    }

}

4.ServiceImpl

package com.zkdj.api.service.impl;


import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zkdj.api.bean.secondary.PageVO;
import com.zkdj.api.entity.SheHuiZuZhiEntity;
import com.zkdj.api.service.ESInfoService;
import com.zkdj.api.vo.SheHuiZuZhiVo;
import com.zkdj.common.bean.CommonPage;
import com.zkdj.common.bean.CommonResult;
import com.zkdj.common.bean.EnterpriseEntity;
import com.zkdj.common.util.ConstantUtils;
import com.zkdj.common.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.IdsQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@SuppressWarnings("all")
@Service
@Slf4j
public class ESInfoServiceImpl implements ESInfoService {
    @Value("${elasticsearch.index}")
    private String INDEX;
    private final String TYPE = "info";
    @Autowired
    private TransportClient transportClient;

    @Override
    public PageVO<SheHuiZuZhiEntity> searchList(SheHuiZuZhiVo vo) {
        BoolQueryBuilder bq = getSearchBuilder(vo);
        PageVO<Object> pager = null;
        int num = vo.getPageNumber() >= 1 ? vo.getPageNumber() : 1;
        int size = vo.getPageSize() > 0 ? vo.getPageSize() : 10;
        pager = new PageVO<>();
        pager.setPageNumber(num);
        pager.setPageSize(size);
        if (StringUtils.isNotBlank(vo.getEstablishTimeSort())&&StringUtils.isNotBlank(vo.getEstablishTimeSortType())) {
            pager.setOrderBy(vo.getEstablishTimeSort());
            pager.setOrderWay(vo.getEstablishTimeSortType());
        }else if (StringUtils.isNotBlank(vo.getRegisteredCapitalSort())&&StringUtils.isNotBlank(vo.getRegisteredCapitalSortType())) {
            pager.setOrderBy(vo.getRegisteredCapitalSort());
            pager.setOrderWay(vo.getRegisteredCapitalSortType());
        }
        return getPageVO(bq, pager);
    }

    /**
     * 封装查询条件
     * @param vo
     * @return
     */
    private BoolQueryBuilder getSearchBuilder(SheHuiZuZhiVo vo){
        BoolQueryBuilder bq = new BoolQueryBuilder();
        PageVO<Object> pager = null;
        //省
        if (StringUtils.isNotBlank(vo.getSheng()) && !vo.getSheng().equals("0") && !vo.getSheng().equals("全部")) {
            bq.filter(QueryBuilders.termQuery("sheng.keyword", vo.getSheng()));
        }
        // 根据产业信息
        if (StringUtils.isNotBlank(vo.getQdcy())) {
            if(!"全部".equals(vo.getQdcy())){
                List<String> industry = new ArrayList<>();
                industry.add(vo.getQdcy().replace("产业",""));
                industry.add(vo.getQdcy());
                if (!vo.getQdcy().contains(",|,")) {industry.add(vo.getQdcy()+",");industry.add(","+vo.getQdcy());};
                bq.filter(QueryBuilders.termsQuery("qdcy.keyword", industry));
            }else{
                bq.must(QueryBuilders.existsQuery("qdcy.keyword"));
            }
        }
        // 根据名称模糊查找
        String names = vo.getName();
        if (StringUtils.isNotBlank(names)) {
            BoolQueryBuilder bool = new BoolQueryBuilder();
            bool.should(QueryBuilders.matchPhraseQuery("name", names));
            bq.filter(bool);
        }
        //渠道类型
        if (StringUtils.isNotBlank(vo.getQdlx())) {
            bq.filter(QueryBuilders.termQuery("qdlx.keyword", vo.getQdlx()));
        }
        return bq;
    }



    @Override
    public Map<String,Object> statBid() {
        SearchRequest searchRequest = new SearchRequest("newbidinfoservers").types("bidinfos");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//        TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("province").field("entityProvince").size(Integer.MAX_VALUE);
        TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("group").field("area.keyword").size(Integer.MAX_VALUE);
        searchSourceBuilder.aggregation(aggregationBuilder);
        searchRequest.source(searchSourceBuilder);
        try {
            log.info(searchRequest.toString());
            SearchResponse searchResponse = transportClient.search(searchRequest).get();
            Terms terms = searchResponse.getAggregations().get("group");
            List<Terms.Bucket> buckets = (List<Terms.Bucket>) terms.getBuckets();
            Map<String,Object> map=new HashMap<>();
            buckets.forEach(x->{
                map.put(x.getKeyAsString(),x.getDocCount());
            });
            return map;
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 获取渠道列表
     * @param vo
     * @return
     */
    @Override
    public PageVO<SheHuiZuZhiEntity> SHZZSearchList(SheHuiZuZhiVo vo) {
        BoolQueryBuilder bq = new BoolQueryBuilder();
        //省
        if (StringUtils.isNotBlank(vo.getSheng()) && !vo.getSheng().equals("0") && !vo.getSheng().equals("全部")) {
            bq.filter(QueryBuilders.termQuery("sheng.keyword", vo.getSheng()));
        }
        //渠道类型
        if (StringUtils.isNotBlank(vo.getQdlx())) {
            bq.filter(QueryBuilders.termQuery("qdlx.keyword", vo.getQdlx()));
        }
        //时间
//        String time = vo.getEstablishTime();
//        if (time != null && StringUtils.isNotEmpty(time)) {
//            String beginDate = vo.getEstablishTime();
//            String endDate = vo.getEstablishTime();
//            bq.filter(QueryBuilders.rangeQuery("publishTime").from(beginDate).to(endDate));
//        }
        // 根据产业信息
        if (StringUtils.isNotBlank(vo.getQdcy())) {
            if(!"全部".equals(vo.getQdcy())){
                List<String> industry = new ArrayList<>();
                industry.add(vo.getQdcy().replace("产业",""));
                industry.add(vo.getQdcy());
                bq.filter(QueryBuilders.termsQuery("qdcy.keyword", industry));
            }else{
                bq.must(QueryBuilders.existsQuery("qdcy.keyword"));
            }
        }
        // 根据名称模糊查找
        String names = vo.getName();
        if (StringUtils.isNotBlank(names)) {
            BoolQueryBuilder bool = new BoolQueryBuilder();
            bool.should(QueryBuilders.matchPhraseQuery("name", names));
            bq.filter(bool);
        }
        PageVO<Object> pager = new PageVO<>();
        int num = vo.getPageNumber() >= 1 ? vo.getPageNumber() : 1;
        int size = vo.getPageSize() > 0 ? vo.getPageSize() : 10;
        pager.setPageNumber(num);
        pager.setPageSize(size);
        if (StringUtils.isNotBlank(vo.getEstablishTimeSort())&&StringUtils.isNotBlank(vo.getEstablishTimeSortType())) {
            pager.setOrderBy(vo.getEstablishTimeSort());
            pager.setOrderWay(vo.getEstablishTimeSortType());
        }else if (StringUtils.isNotBlank(vo.getRegisteredCapitalSort())&&StringUtils.isNotBlank(vo.getRegisteredCapitalSortType())) {
            pager.setOrderBy(vo.getRegisteredCapitalSort());
            pager.setOrderWay(vo.getRegisteredCapitalSortType());
        }
        return getPageVO(bq, pager);
    }
    /**
     * 企业的投资企业分布统计
     * @param vo
     * @param field
     * @return
     */
    public List<String[]> aggrBidinfo(SheHuiZuZhiVo vo, String field){
        SearchRequest searchRequest = new SearchRequest(INDEX).types(TYPE);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("group").field(field+".keyword").size(100);
        aggregationBuilder.minDocCount(1L);
        aggregationBuilder.size(100);
        aggregationBuilder.showTermDocCountError(true);
        sourceBuilder.aggregation(aggregationBuilder);
        //核心查询条件
        BoolQueryBuilder boolQueryBuilder = getSearchBuilder(vo);
        long allStart = System.currentTimeMillis();
        SearchResponse response = null;
        sourceBuilder.query(boolQueryBuilder).size(0);
        try {
            searchRequest.source(sourceBuilder);
            response = transportClient.search(searchRequest).actionGet();

            Terms terms = response.getAggregations().get("group");
            List<String[]> data = new ArrayList<>();
            for (Terms.Bucket bucket : terms.getBuckets()) {
                String key = bucket.getKeyAsString();
                if(StringUtils.isNotBlank(key)){
//                    key = StringUtils.isNotBlank(ConstantUtils.LongMap.get(key))? ConstantUtils.LongMap.get(key):key;
                    String count = bucket.getDocCount()+"";
                    data.add(new String[]{key,count});
                }else{
                    key = "-";
                    String count = bucket.getDocCount()+"";
                    data.add(new String[]{key,count});
                }
            }
            long allEnd = System.currentTimeMillis();
            log.info("aggrCompany time:{}",(allEnd - allStart));
            return data;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ArrayList<>();
    }



    private PageVO<SheHuiZuZhiEntity> getPageVO(BoolQueryBuilder bq, PageVO<Object> pager) {
        try {
            int num = 1;
            int size = 10;
            if (pager.getPageNumber() >= 1 && pager.getPageSize() > 0) {
                num = pager.getPageNumber();
                size = pager.getPageSize();
            }
            //关键词高亮
            HighlightBuilder highlightBuilder = new HighlightBuilder();
            highlightBuilder.preTags("<font style='color:red;'>");
            highlightBuilder.postTags("</font>");
            highlightBuilder.field("name");
//            highlightBuilder.field("content");
//            highlightBuilder.field("entryName");

            SearchRequest searchRequest = new SearchRequest(INDEX).types(TYPE);
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
            TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("group").field("name.keyword").size(100);
            sourceBuilder.aggregation(aggregationBuilder);
            sourceBuilder.highlighter(highlightBuilder);

            sourceBuilder.query(bq);
            sourceBuilder.from(num == 1 ? 0 : (num - 1) * size);
            sourceBuilder.size(size);
            if (null != pager && StringUtils.isNotBlank(pager.getOrderWay())) {
                if ("DESC".equals(pager.getOrderWay().toUpperCase())) {
                    sourceBuilder.sort(pager.getOrderBy(), SortOrder.DESC);
                } else if ("ASC".equals(pager.getOrderWay().toUpperCase())) {
                    sourceBuilder.sort(pager.getOrderBy(), SortOrder.ASC);
                } else {
                    sourceBuilder.sort(pager.getOrderBy(), SortOrder.DESC);
                }
            }
            searchRequest.source(sourceBuilder);
            SearchResponse response = transportClient.search(searchRequest).get();
            List<SheHuiZuZhiEntity> list = new ArrayList<>();
            for (SearchHit hit : response.getHits()) {
                SheHuiZuZhiEntity entity = JSON.parseObject(hit.getSourceAsString(), SheHuiZuZhiEntity.class);
                // 获取高亮内容
//                String[] fields = {"title", "content", "entryName"};
                String[] fields = {"name"};
                JSONObject object = new JSONObject();
                Map<String, HighlightField> highlightFields = hit.getHighlightFields();
                for (String field : fields) {
                    HighlightField highlightField = highlightFields.get(field);
                    if (null != highlightField) {
                        Text[] texts = highlightField.getFragments();
                        String content = "";
                        for (Text text : texts) {
                            content += text;
                        }
                        StringUtil.reflectChangeObjByValue(entity, field, content); //修改指定对象值
                        object.put(field, content);
                    }
                }
                if (!object.isEmpty()) {
                    entity.setHighlight(object);
                }
                list.add(entity);
            }
            long count = response.getHits().getTotalHits();
            PageVO<SheHuiZuZhiEntity> pageVo = new PageVO<SheHuiZuZhiEntity>();
            pageVo.setRows(list);
            pageVo.setTotal(count);
            pageVo.setPageSize(size);
            pageVo.setPageNumber(num);
            return pageVo;
        } catch (Exception e) {
            e.printStackTrace();
            return new PageVO<>();
        }
    }

    @Override
    public Object getByIds(String ids) {
        SearchRequestBuilder searchRequestBuilder = transportClient.prepareSearch(INDEX);
        IdsQueryBuilder idsQueryBuilder = QueryBuilders.idsQuery().addIds(ids.split(","));
        try {
            SearchResponse searchResponse = searchRequestBuilder.setQuery(idsQueryBuilder).execute().get();
            SearchHit[] hits = searchResponse.getHits().getHits();
            List list=new ArrayList();
            for(SearchHit item : hits) {
                list.add(item.getSourceAsMap());
            }
            return list;
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return null;
    }




}

5.工具类

package com.zkdj.api.bean.secondary;

import lombok.Data;
import org.springframework.data.domain.Page;

import java.io.Serializable;
import java.util.List;

/**
 * Created by gq
 * 将Page转为可序列化的VO对象
 */
@Data
public class PageVO<T> implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 4787516962616799705L;

	public PageVO(Page<T> page){
		this.rows=page.getContent();
		this.total=page.getTotalElements();
		this.pageNumber=page.getNumber();
		this.pageSize=page.getSize();
		this.totalPage=page.getTotalPages();
	}
	public PageVO(){
		
	}
    private List<T> rows;

    private long total;
    
    private int totalPage;

    private Integer pageNumber;

    private Integer pageSize;

    private String orderBy;

    private String orderWay;

    private Object params;   //查询的条件参数
	private String scrollId;
}

/**
 * Copyright (C), 2015-2018, XXX有限公司
 * FileName: EnterpriseEntity_back
 * Author:   邓杰
 * Date:    2020-03-20
 * Description: 企业基本数据
 * version: v1.1
 */
package com.zkdj.api.vo;

import com.zkdj.api.bean.secondary.PageVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

/**
 * 社会组织/渠道
 */
@Data
public class SheHuiZuZhiVo extends PageVO implements Serializable,Cloneable  {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("社会信用代码")
    private String id;//社会信用代码
    @ApiModelProperty("社会组织名称")
    private String name;//社会组织名称 --
    @ApiModelProperty("采集网址")
    private String siteUrl;//
    @ApiModelProperty("状态")
    private Integer status;//
    @ApiModelProperty("官网")
    private String url;//官网
    @ApiModelProperty("组织标识")
    private String identification;//组织标识
    @ApiModelProperty("登记管理机关")
    private String registration;//登记管理机关
    @ApiModelProperty("业务主管单位")
    private String business;//业务主管单位
    @ApiModelProperty("法定代表人")
    private String representative;//法定代表人
    @ApiModelProperty("成立登记日期")
    private String establishTime;//成立登记日期
    @ApiModelProperty("注册资金")
    private String registered_capital;//注册资金
    @ApiModelProperty("登记状态")
    private String registration_status;//登记状态
    @ApiModelProperty("民政部登记:登记证号")
    private String register_num;//民政部登记:登记证号
    @ApiModelProperty("社会组织类型")
    private String organizations_type;//社会组织类型
    @ApiModelProperty("住所")
    private String address;//住所
    @ApiModelProperty("地方登记:证书有效期")
    private String zhengshuyouxiao;//地方登记:证书有效期
    @ApiModelProperty("地方登记:业务范围")
    private String yewu;//地方登记:业务范围
    @ApiModelProperty("组织类型")
    private String zuzhileixing;//组织类型
    @ApiModelProperty("省(高德API获取)")
    private String sheng;//省(高德API获取)--
    @ApiModelProperty("市(高德API获取)")
    private String shi;//市(高德API获取)
    @ApiModelProperty("区(高德API获取)")
    private String qu;//区(高德API获取)
    @ApiModelProperty("经纬度(高德API获取)")
    private String jingweidu;//经纬度(高德API获取)
    @ApiModelProperty("渠道类型")
    private String qdlx;//渠道类型 --
    @ApiModelProperty("渠道产业(name字段匹配关键词)")
    private String qdcy;//渠道产业(name字段匹配关键词)
    @ApiModelProperty("渠道产业链(所属产业链,name字段匹配关键词)")
    private String sscy_chain;//渠道产业链(所属产业链,name字段匹配关键词)
    @ApiModelProperty("渠道类型")
    private String qd_type;//
    @ApiModelProperty("存入es时间")
    private String insert_time;//存入es时间



    @ApiModelProperty("成立时间排序字段")
    private String establishTimeSort;//成立时间排序字段
    @ApiModelProperty("成立时间排序字段类型")
    private String establishTimeSortType;//成立时间排序字段类型
    @ApiModelProperty("注册资金排序字段")
    private String registeredCapitalSort;//注册资金排序字段 --
    @ApiModelProperty("注册资金排序字段类型")
    private String registeredCapitalSortType;//注册资金排序字段类型 --


}

/**
 * Copyright (C), 2015-2018, XXX有限公司
 * FileName: EnterpriseEntity_back
 * Author:   邓杰
 * Date:    2020-03-20
 * Description: 企业基本数据
 * version: v1.1
 */
package com.zkdj.api.entity;

import com.alibaba.fastjson.JSONObject;
import lombok.Data;

import java.io.Serializable;

/**
 * 社会组织/渠道
 */
@Data
public class SheHuiZuZhiEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    private String id;//社会信用代码
    private String name;//社会组织名称
    private String siteUrl;//
    private Integer status;//
    private String url;//官网
    private String identification;//组织标识
    private String registration;//登记管理机关
    private String business;//业务主管单位
    private String representative;//法定代表人
    private String establishTime;//成立登记日期
    private String registered_capital;//注册资金
    private String registration_status;//登记状态
    private String register_num;//民政部登记:登记证号
    private String organizations_type;//社会组织类型
    private String address;//住所
    private String zhengshuyouxiao;//地方登记:证书有效期
    private String yewu;//地方登记:业务范围
    private String zuzhileixing;//组织类型
    private String sheng;//省(高德API获取)
    private String shi;//市(高德API获取)
    private String qu;//区(高德API获取)
    private String jingweidu;//经纬度(高德API获取)
    private String qdlx;//渠道类型
    private String qdcy;//渠道产业(name字段匹配关键词)
    private String sscy_chain;//渠道产业链(所属产业链,name字段匹配关键词)
    private String qd_type;//
    private String insert_time;//存入es时间

    private String registered_capital_sort;//注册资金排序

    private JSONObject highlight;//关键字高亮块
}

package com.zkdj.common.bean;

import lombok.Data;

import java.io.Serializable;

/**
 * 通用返回对象
 */
@Data
public class CommonResult<T> implements Serializable {

    private static final long serialVersionUID = 5190371721822680303L;
    /**
     * 状态码
     */
    private int code;
    /**
     * 提示信息
     */
    private String message;
    /**
     * 数据封装
     */
    private T data;

    public CommonResult(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 返回成功信息
     *
     * @return
     */
    public static <T> CommonResult<T> success() {
        return new CommonResult<T>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), null);
    }

    public static <T> CommonResult<T> success(T data) {
        return new CommonResult<T>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data);
    }

    public static <T> CommonResult<T> success(String message, T data) {
        return new CommonResult<T>(ResultCode.SUCCESS.getCode(), message, data);
    }

    /**
     * 返回失败信息
     *
     * @return
     */
    public static <T> CommonResult<T> failed() {
        return new CommonResult<T>(ResultCode.FAILED.getCode(), ResultCode.FAILED.getMessage(), null);
    }

    public static <T> CommonResult<T> failed(String message) {
        return new CommonResult<T>(ResultCode.FAILED.getCode(), message, null);
    }

    /**
     * 返回参数校验失败信息
     *
     * @return
     */
    public static <T> CommonResult<T> validateFailed() {
        return new CommonResult<T>(ResultCode.VALIDATE_FAILED.getCode(), ResultCode.VALIDATE_FAILED.getMessage(), null);
    }

    public static <T> CommonResult<T> validateFailed(String message) {
        return new CommonResult<T>(ResultCode.VALIDATE_FAILED.getCode(), message, null);
    }

    public static <T> CommonResult<T> forbidden() {
        return new CommonResult<T>(ResultCode.FORBIDDEN.getCode(), ResultCode.FORBIDDEN.getMessage(), null);
    }

}

6.ES链接

package com.zkdj.api.config;


import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.net.InetAddress;
import java.net.UnknownHostException;

@Configuration
public class ElasticsearchConfig {

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

    @Value("${elasticsearch.cluster-ip}")
    public String clusterIp;

    @Value("${elasticsearch.cluster-port}")
    public int clusterPort;

    @Bean(name = "transportClient")
    public TransportClient transportClient() throws UnknownHostException {
        Settings settings = Settings.builder()
                .put("cluster.name", clusterName)
                .build();

//        TransportClient client = new PreBuiltTransportClient(settings);
//        client.addTransportAddress(new TransportAddress(InetAddress.getByName(clusterIp), clusterPort));
        TransportClient client = new PreBuiltTransportClient(settings);
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(clusterIp), clusterPort));

        try {
            SearchResponse searchResponse = client.prepareSearch("cars").addSort("price", SortOrder.ASC).setSize(10).execute().get();
            SearchHit[] hits = searchResponse.getHits().getHits();
            for (int i = 0; i < hits.length; i++) {
                System.out.println(hits[i].getSourceAsMap());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return client;
    }

}

参考链接:https://blog.csdn.net/qq_44886213/article/details/123425024

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10000guo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值