使用springboot整合TransportClient 進行搭建elasticsearch服務


文章目錄
前言
一、新建springboot項目
1. 注意的地方
2. 最終目錄結構
二、新增maven依賴
1. ES版本
2. 新增依賴
3. pom.xml全部依賴
三、業務代碼
1. application.properties
2. ES全局配置類
3. 編寫elasticsearch工具類
4. 編寫分頁實體類
5. 測試類
6. 測試結果
前言
先送上博客一,可以安裝和了解有關elasticsearch的軟件elasticsearch學習一:了解 ES,版本之間的對應。安裝elasticsearch,kibana,head插件。

常見搭建elasticsearch服務有四種方式:1、TransportClient;2、RestClient;3、Jest; 4、Spring Data Elasticsearch 其中TransportClient和RestClient是Elasticsearch原生的api。TransportClient可以支持2.x,5.x版本,TransportClient將會在Elasticsearch 7.0棄用並在8.0中完成刪除,替而代之,我們使用Java High Level REST Client,它使用HTTP請求而不是Java序列化請求。

因為公司使用第二種方式使用transport Client 操作elasticsearch服務,所以特意從網上自學習了下 transport Client,特來記錄下,最好自己能夠搭建一個 elasticsearch 服務,按照上個博客安裝好三個軟件即可。

本博客項目是比較簡單的,主要就是上個博客搭建比較麻煩吧。

博客目錄

elasticsearch學習一:了解 ES,版本之間的對應。安裝elasticsearch,kibana,head插件、elasticsearch-ik分詞器。
elasticsearch學習二:使用springboot整合TransportClient 進行搭建elasticsearch服務
elasticsearch學習三:elasticsearch-ik分詞器的自定義配置 分詞內容
elasticsearch學習四:使用springboot整合 rest 進行搭建elasticsearch服務
一、新建springboot項目
1. 注意的地方

 

 

 

 

 

 

 

2. 最終目錄結構

 

 

 


二、新增maven依賴
1. ES版本
elasticsearch和kibana的版本都是6.4.2版本

2. 新增依賴

<!--alibaba fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.38</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>

<!-- elasticsearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>6.0.0</version>
</dependency>

 


3. pom.xml全部依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.feng.springbootelasticsearch</groupId>
<artifactId>springboot-elasticsearch-transport</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-elasticsearch-transport</name>
<description>springboot-elasticsearch-transport</description>

<properties>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<!--alibaba fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.38</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>

<!-- elasticsearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>6.0.0</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>

</project>

 

三、業務代碼
1. application.properties
這里的內容一定要與 elasticsearch 目錄下 /conf/elasticsearch.yml 中的配置一致。

 

server.port=8087

elasticsearch.cluster-name=elasticsearch
elasticsearch.ip=127.0.0.1
elasticsearch.port=20104
elasticsearch.pool=5

2. ES全局配置類
在config包下編寫ElasticSearchConfig類,

package com.feng.springbootelasticsearchtransport.config;

import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
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;

@Slf4j
@Configuration
public class ElasticSearchConfig {
    @Value("${elasticsearch.ip}")
    private String hostName;

    /**
     * 端口
     */
    @Value("${elasticsearch.port}")
    private String port;

    /**
     * 集群名稱
     */
    @Value("${elasticsearch.cluster-name}")
    private String clusterName;

    /**
     * 連接池
     */
    @Value("${elasticsearch.pool}")
    private String poolSize;

    /**
     * Bean name default  函數名字
     * @return
     */
    @Bean(name = "transportClient")
    public TransportClient transportClient() {
        log.info("Elasticsearch初始化開始。。。。。");
        TransportClient transportClient = null;
        try {
            // 配置信息
            Settings esSetting = Settings.builder()
                    .put("cluster.name", clusterName) //集群名字
                    .put("client.transport.sniff", true)//增加嗅探機制,找到ES集群
                    .put("thread_pool.search.size", Integer.parseInt(poolSize))//增加線程池個數,暫時設為5
                    .build();
            //配置信息Settings自定義
            transportClient = new PreBuiltTransportClient(esSetting);
            TransportAddress transportAddress = new TransportAddress(InetAddress.getByName(hostName), Integer.valueOf(port));
            transportClient.addTransportAddresses(transportAddress);
            log.info("Elasticsearch初始化成功。。。。。");
        } catch (Exception e) {
            log.error("elasticsearch TransportClient create error!!", e);
        }
        return transportClient;
    }
}

 

 

3. 編寫elasticsearch工具類
在utils包下編寫ElasticSearchUtil類,

package com.feng.springbootelasticsearchtransport.utils;

import com.alibaba.fastjson.JSONObject;
import com.feng.springbootelasticsearchtransport.bean.EsPage;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequestBuilder;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Component
@Slf4j
public class ElasticSearchUtil {

    @Autowired
    private TransportClient transportClient;

    private static TransportClient client;

    /**
     * @PostContruct是spring框架的注解
     * spring容器初始化的時候執行該方法
     */
    @PostConstruct
    public void init() {
        client = this.transportClient;
    }

    /**
     * 創建索引
     *
     * @param index
     * @return
     */
    public static boolean createIndex(String index) {
        if(!isIndexExist(index)){
            log.info("Index is not exits!");
        }else {
            log.info("Index is exits!");
        }
        CreateIndexResponse indexResponse = client.admin().indices().prepareCreate(index).execute().actionGet();
        log.info("執行建立成功?" + indexResponse.isAcknowledged());
        return indexResponse.isAcknowledged();
    }


    /**
     * 刪除索引
     *
     * @param index
     * @return
     */
    public static boolean deleteIndex(String index) {
        if(!isIndexExist(index)) {
            log.info("Index is not exits!");
        }
        // AcknowledgedResponse dResponse = client.admin().indices().prepareDelete(index).execute().actionGet();
        DeleteIndexResponse dResponse = client.admin().indices().prepareDelete(index).execute().actionGet();
        if (dResponse.isAcknowledged()) {
            log.info("delete index " + index + " successfully!");
        } else {
            log.info("Fail to delete index " + index);
        }
        return dResponse.isAcknowledged();
    }

    /**
     * 判斷索引是否存在
     *
     * @param index
     * @return
     */
    public static boolean isIndexExist(String index) {
        IndicesExistsResponse inExistsResponse = client.admin().indices().exists(new IndicesExistsRequest(index)).actionGet();
        if (inExistsResponse.isExists()) {
            log.info("Index [" + index + "] is exist!");
        } else {
            log.info("Index [" + index + "] is not exist!");
        }
        return inExistsResponse.isExists();
    }

    /**
     * 數據添加,正定ID
     *
     * @param jsonObject 要增加的數據
     * @param index 索引,類似數據庫
     * @param type 類型,類似表
     * @param id 數據ID
     * @return
     */
    public static String addData(JSONObject jsonObject, String index, String type, String id) {
        IndexResponse response = client.prepareIndex(index, type, id).setSource(jsonObject).get();
        log.info("addData response status:{},id:{}", response.status().getStatus(), response.getId());
        return response.getId();
    }
    /**
     * 數據添加
     *
     * @param jsonObject 要增加的數據
     * @param index 索引,類似數據庫
     * @param type 類型,類似表
     * @return
     */
    public static String addData(JSONObject jsonObject, String index, String type) {
        return addData(jsonObject, index, type, UUID.randomUUID().toString().replaceAll("-", "").toUpperCase());
    }

    /**
     * 通過ID刪除數據
     *
     * @param index 索引,類似數據庫
     * @param type 類型,類似表
     * @param id 數據ID
     */
    public static void deleteDataById(String index, String type, String id) {
        DeleteResponse response = client.prepareDelete(index, type, id).execute().actionGet();
        log.info("deleteDataById response status:{},id:{}", response.status().getStatus(), response.getId());
    }

    /**
     * 通過ID 更新數據
     *
     * @param jsonObject 要增加的數據
     * @param index 索引,類似數據庫
     * @param type 類型,類似表
     * @param id 數據ID
     * @return
     */
    public static void updateDataById(JSONObject jsonObject, String index, String type, String id) {
        UpdateRequest updateRequest = new UpdateRequest();
        updateRequest.index(index).type(type).id(id).doc(jsonObject);
        client.update(updateRequest);
    }

    /**
     * 通過ID獲取數據
     *
     * @param index 索引,類似數據庫
     * @param type 類型,類似表
     * @param id 數據ID
     * @param fields 需要顯示的字段,逗號分隔(缺省為全部字段)
     * @return
     */
    public static Map<String,Object> searchDataById(String index, String type, String id, String fields) {
        GetRequestBuilder getRequestBuilder = client.prepareGet(index, type, id);
        if (StringUtils.isNotEmpty(fields)) {
            getRequestBuilder.setFetchSource(fields.split(","), null);
        }
        GetResponse getResponse = getRequestBuilder.execute().actionGet();
        return getResponse.getSource();
    }

    /**
     * 使用分詞查詢,並分頁
     *
     * @param index 索引名稱
     * @param type 類型名稱,可傳入多個type逗號分隔
     * @param startPage 當前頁
     * @param pageSize 每頁顯示條數
     * @param query 查詢條件
     * @param fields 需要顯示的字段,逗號分隔(缺省為全部字段)
     * @param sortField 排序字段
     * @param highlightField 高亮字段
     * @return
     */
    public static EsPage searchDataPage(String index, String type, int startPage, int pageSize, QueryBuilder query, String fields, String sortField, String highlightField) {
        SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index);
        if (StringUtils.isNotEmpty(type)) {
            searchRequestBuilder.setTypes(type.split(","));
        }
        searchRequestBuilder.setSearchType(SearchType.QUERY_THEN_FETCH);
        // 需要顯示的字段,逗號分隔(缺省為全部字段)
        if (StringUtils.isNotEmpty(fields)) {
            searchRequestBuilder.setFetchSource(fields.split(","), null);
        }

        //排序字段
        if (StringUtils.isNotEmpty(sortField)) {
            searchRequestBuilder.addSort(sortField, SortOrder.DESC);
        }

        // 高亮(xxx=111,aaa=222)
        if (StringUtils.isNotEmpty(highlightField)) {
            HighlightBuilder highlightBuilder = new HighlightBuilder();

        //highlightBuilder.preTags("<span style='color:red' >");//設置前綴
        //highlightBuilder.postTags("</span>");//設置后綴

        // 設置高亮字段
            highlightBuilder.field(highlightField);
            searchRequestBuilder.highlighter(highlightBuilder);
        }

        //searchRequestBuilder.setQuery(QueryBuilders.matchAllQuery());
        searchRequestBuilder.setQuery(query);

        // 分頁應用
        searchRequestBuilder.setFrom(startPage).setSize(pageSize);

        // 設置是否按查詢匹配度排序
        searchRequestBuilder.setExplain(true);

        //打印的內容 可以在 Elasticsearch head 和 Kibana 上執行查詢
        log.info("\n{}", searchRequestBuilder);

        // 執行搜索,返回搜索響應信息
        SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();

        long totalHits = searchResponse.getHits().getTotalHits();
        long length = searchResponse.getHits().getHits().length;

        log.debug("共查詢到[{}]條數據,處理數據條數[{}]", totalHits, length);

        if (searchResponse.status().getStatus() == 200) {
            // 解析對象
            List<Map<String, Object>> sourceList = setSearchResponse(searchResponse, highlightField);

            return new EsPage(startPage, pageSize, (int) totalHits, sourceList);
        }

        return null;

    }

    /**
     * 使用分詞查詢
     *
     * @param index 索引名稱
     * @param type 類型名稱,可傳入多個type逗號分隔
     * @param query 查詢條件
     * @param size 文檔大小限制
     * @param fields 需要顯示的字段,逗號分隔(缺省為全部字段)
     * @param sortField 排序字段
     * @param highlightField 高亮字段
     * @return
     */
    public static List<Map<String, Object>> searchListData(String index, String type, QueryBuilder query, Integer size, String fields, String sortField, String highlightField) {

        SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index);
        if (StringUtils.isNotEmpty(type)) {
            searchRequestBuilder.setTypes(type.split(","));
        }

        if (StringUtils.isNotEmpty(highlightField)) {
            HighlightBuilder highlightBuilder = new HighlightBuilder();
            // 設置高亮字段
            highlightBuilder.field(highlightField);
            searchRequestBuilder.highlighter(highlightBuilder);
        }

        searchRequestBuilder.setQuery(query);

        if (StringUtils.isNotEmpty(fields)) {
            searchRequestBuilder.setFetchSource(fields.split(","), null);
        }
        searchRequestBuilder.setFetchSource(true);

        if (StringUtils.isNotEmpty(sortField)) {
            searchRequestBuilder.addSort(sortField, SortOrder.DESC);
        }

        if (size != null && size > 0) {
            searchRequestBuilder.setSize(size);
        }

        // 打印的內容 可以在 Elasticsearch head 和 Kibana 上執行查詢
        log.info("\n{}", searchRequestBuilder);

        SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();

        long totalHits = searchResponse.getHits().getTotalHits();
        long length = searchResponse.getHits().getHits().length;

        log.info("共查詢到[{}]條數據,處理數據條數[{}]", totalHits, length);

        if (searchResponse.status().getStatus() == 200) {
            // 解析對象
            return setSearchResponse(searchResponse, highlightField);
        }
        return null;
    }


    /**
     * 高亮結果集 特殊處理
     *
     * @param searchResponse
     * @param highlightField
     */
    private static List<Map<String, Object>> setSearchResponse(SearchResponse searchResponse, String highlightField) {
        List<Map<String, Object>> sourceList = new ArrayList<Map<String, Object>>();
        StringBuffer stringBuffer = new StringBuffer();

        for (SearchHit searchHit : searchResponse.getHits().getHits()) {
            searchHit.getSourceAsMap().put("id", searchHit.getId());

            if (StringUtils.isNotEmpty(highlightField)) {

                System.out.println("遍歷 高亮結果集,覆蓋 正常結果集" + searchHit.getSourceAsMap());
                Text[] text = searchHit.getHighlightFields().get(highlightField).getFragments();

                if (text != null) {
                    for (Text str : text) {
                        stringBuffer.append(str.string());
                    }
                    //遍歷 高亮結果集,覆蓋 正常結果集
                    searchHit.getSourceAsMap().put(highlightField, stringBuffer.toString());
                }
            }
            sourceList.add(searchHit.getSourceAsMap());
        }
        return sourceList;
    }
}

 

4. 編寫分頁實體類
在bean包下編寫EsPage類,

package com.feng.springbootelasticsearchtransport.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class EsPage {

    /**
     * 當前頁
     */
    private int currentPage;
    /**
     * 每頁顯示多少條
     */
    private int pageSize;

    /**
     * 總記錄數
     */
    private int recordCount;
    /**
     * 本頁的數據列表
     */
    private List<Map<String, Object>> recordList;

    /**
     * 總頁數
     */
    private int pageCount;
    /**
     * 頁碼列表的開始索引(包含)
     */
    private int beginPageIndex;
    /**
     * 頁碼列表的結束索引(包含)
     */
    private int endPageIndex;

    /**
     * 只接受前4個必要的屬性,會自動的計算出其他3個屬性的值
     *
     * @param currentPage
     * @param pageSize
     * @param recordCount
     * @param recordList
     */
    public EsPage(int currentPage, int pageSize, int recordCount, List<Map<String, Object>> recordList) {
        this.currentPage = currentPage;
        this.pageSize = pageSize;
        this.recordCount = recordCount;
        this.recordList = recordList;

        // 計算總頁碼
        pageCount = (recordCount + pageSize - 1) / pageSize;

        // 計算 beginPageIndex 和 endPageIndex
        // >> 總頁數不多於10頁,則全部顯示
        if (pageCount <= 10) {
            beginPageIndex = 1;
            endPageIndex = pageCount;
        }
        // >> 總頁數多於10頁,則顯示當前頁附近的共10個頁碼
        else {
            // 當前頁附近的共10個頁碼(前4個 + 當前頁 + 后5個)
            beginPageIndex = currentPage - 4;
            endPageIndex = currentPage + 5;
            // 當前面的頁碼不足4個時,則顯示前10個頁碼
            if (beginPageIndex < 1) {
                beginPageIndex = 1;
                endPageIndex = 10;
            }
            // 當后面的頁碼不足5個時,則顯示后10個頁碼
            if (endPageIndex > pageCount) {
                endPageIndex = pageCount;
                beginPageIndex = pageCount - 10 + 1;
            }
        }
    }
}

 

5. 測試類
在測試模塊中進行編寫測試類,進行CRUD操作。

package com.feng.springbootelasticsearchtransport;

import com.alibaba.fastjson.JSONObject;
import com.feng.springbootelasticsearchtransport.bean.EsPage;
import com.feng.springbootelasticsearchtransport.utils.ElasticSearchUtil;
import org.apache.http.client.utils.DateUtils;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.junit.jupiter.api.Test;
import org.junit.platform.commons.util.StringUtils;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Random;

@SpringBootTest
class SpringbootElasticsearchTransportApplicationTests {

    /**
     * 測試索引
     */
    private String indexName="test_index";

    /**
     * 類型
     */
    private String esType="external";

    @Test
    void contextLoads() {
        System.out.println("111");
    }

    /**
     * 創建索引
     */
    @Test
    void test01CreateIndex(){
        if(!ElasticSearchUtil.isIndexExist(indexName)) {
            ElasticSearchUtil.createIndex(indexName);
        } else{
            System.out.println("索引已經存在");;
        }
        System.out.println("索引創建成功");
    }

    /**
     * 插入記錄
     */
    @Test
    void test02InsertJson(){
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("id", DateUtils.formatDate(new Date()));
        jsonObject.put("age", 25);
        jsonObject.put("name", "j-" + new Random(100).nextInt());
        jsonObject.put("date", new Date());
        String id = ElasticSearchUtil.addData(jsonObject, indexName, esType, jsonObject.getString("id"));
        System.out.println("id:"+id);
    }

    /**
     * 刪除
     */
    @Test
    void test03Delete(){
        String id = "Wed, 16 Dec 2020 07:19:19 GMT";
        if(StringUtils.isNotBlank(id)) {
            ElasticSearchUtil.deleteDataById(indexName, esType, id);
            System.out.println("刪除id=" + id);;
        } else{
            System.out.println("id為空");;
        }
    }

    /**
     * 更新
     */
    @Test
    void test04Update(){
        String id = "Wed, 16 Dec 2020 07:19:19 GMT";
        if(StringUtils.isNotBlank(id)) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("id", id);
            jsonObject.put("age", 31);
            jsonObject.put("name", "修改");
            jsonObject.put("date", new Date());
            ElasticSearchUtil.updateDataById(jsonObject, indexName, esType, id);
            System.out.println("id=" + id);;
        }
        else{
            System.out.println("id為空");;
        }
    }

    /**
     * 獲取數據
     */
    @Test
    void test05GetData(){
        String id = "Wed, 16 Dec 2020 07:19:19 GMT";
        if(StringUtils.isNotBlank(id)) {
            Map<String, Object> map= ElasticSearchUtil.searchDataById(indexName,esType,id,null);
            System.out.println(JSONObject.toJSONString(map));;
        }
        else{
            System.out.println("id為空");;
        }
    }

    /**
     *
     */
    @Test
    void test06QueryMatchData(){
        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
        boolean matchPhrase = false;
        if (matchPhrase == Boolean.TRUE) {
            boolQuery.must(QueryBuilders.matchPhraseQuery("name", "修"));
        } else {
            boolQuery.must(QueryBuilders.matchQuery("name", "修"));
        }
        List<Map<String, Object>> list = ElasticSearchUtil.searchListData(indexName, esType, boolQuery, 10, null, null, null);
        System.out.println(JSONObject.toJSONString(list));;
    }

    /**
     * 通配符查詢數據
     * 通配符查詢 ? 用來匹配1個任意字符,* 用來匹配零個或者多個字符
     * 0 條數據
     */
    @Test
    void test07QueryWildcardData(){
        QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("name.keyword", "j-*466");
        List<Map<String, Object>> list = ElasticSearchUtil.searchListData(indexName, esType, queryBuilder, 10, null, null, null);
        System.out.println(JSONObject.toJSONString(list));;
    }

    /**
     * 正則查詢
     * 0 條數據
     */
    @Test
    void test08QueryRegexpData(){
        QueryBuilder queryBuilder = QueryBuilders.regexpQuery("name.keyword", "j--[0-9]{1,11}");
        List<Map<String, Object>> list = ElasticSearchUtil.searchListData(indexName, esType, queryBuilder, 10, null, null, null);
        System.out.println(JSONObject.toJSONString(list));;
    }

    /**
     * 查詢數字范圍數據
     */
    @Test
    void test09QueryIntRangeData(){
        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
        boolQuery.must(QueryBuilders.rangeQuery("age").from(21).to(100));
        List<Map<String, Object>> list = ElasticSearchUtil.searchListData(indexName, esType, boolQuery, 10, null, null, null);
        System.out.println(JSONObject.toJSONString(list));;
    }

    /**
     * 查詢日期范圍數據
     */
    @Test
    void test10QueryDateRangeData(){
        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
        boolQuery.must(QueryBuilders.rangeQuery("date").from("2018-04-25T08:33:44.840Z").to("2021-04-25T10:03:08.081Z"));
        List<Map<String, Object>> list = ElasticSearchUtil.searchListData(indexName, esType, boolQuery, 10, null, null, null);
        System.out.println(JSONObject.toJSONString(list));;
    }

    /**
     * 查詢分頁
     * startPage 第幾條記錄開始 測試 1
     * pageSize 每頁大小 測試 10
     * @return
     */
    @Test
    void test11QueryPage(){
        int startPage = 1;
        int pageSize = 10;
        if(StringUtils.isNotBlank(String.valueOf(startPage))&& StringUtils.isNotBlank(String.valueOf(pageSize))) {
            BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
            boolQuery.must(QueryBuilders.rangeQuery("date").from("2018-04-25T08:33:44.840Z")
                    .to("2021-04-25T10:03:08.081Z"));
            EsPage list = ElasticSearchUtil.searchDataPage(indexName, esType, Integer.parseInt(startPage+""), Integer.parseInt(pageSize+""), boolQuery, null, null, null);
            System.out.println(JSONObject.toJSONString(list));
        }
        else{
            System.out.println("startPage或者pageSize缺失");
        }
    }
}

6. 測試結果
第五步中的測試類中的所有方法都已測試,均已測試成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM