作者微信 bishe2022

代码功能演示视频在页面下方,请先观看;如需定制开发,联系页面右侧客服
SpringBoot+JestClient操作ElasticSearch
包含内容: 源码,全套工具
作者QQ549710689
详情描述

如遇视频不清晰,请最大化观看演示

官网:http://www.ckplayer.com,版本号:X

以下仅列出部分功能,全部功能请至官网 《手册》查看

单独监听功能:


播放状态:
跳转状态:无
缓冲:100
当前音量:0.8
是否全屏:否
控制栏:显示
还未结束
当前播放时间(秒):0
前置广告状态:
鼠标位置
切换清晰度:
点击监听:
监听截图功能

Custom Tab

实例使用SpringBoot结合JestClient组件操作ElasticSearch, 实现全文搜索,精确搜索,区间搜索,创建索引,新增数据,查询数据,批量新增数据,全文搜索,删除索引,删除数据等功能,  由于JestClient版本与ElasticSearch之间的版本有一定的要求, 本文对应的版本见下面:

项目对应的实例代码可以通过【下载实例】按钮获取

开发工具: IntelliJ IDEA 2017, JDK1.8,  Maven3.0.2, ElasticSearch-5.6.7(windows版)

【项目包含内容】(见下图):   

image.png

导入工程后:

image.png

JestClient

首先在Maven中添加如下依赖:

    <dependency>
        <groupId>io.searchbox</groupId> 
         <artifactId>jest</artifactId>
        <version>5.3.3</version>
    </dependency>


然后编写相关的测试代码。
代码中的注释应该很完整,所以这里就不再对代码过多的讲述了。

import com.alibaba.fastjson.JSON;
import com.example.elastic.bean.User;
import com.google.gson.Gson;
import io.searchbox.client.JestClient;
import io.searchbox.client.JestResult;
import io.searchbox.core.*;
import io.searchbox.indices.CreateIndex;
import io.searchbox.indices.DeleteIndex;
import io.searchbox.indices.mapping.GetMapping;
import io.searchbox.indices.mapping.PutMapping;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticApplicationTests {
    private static String indexName = "userindex";
    private static String typeName = "user";


    @Autowired
    JestClient jestClient;

    /**
     * 创建索引
     * @return
     * @throws Exception
     */
    @Test
    public void createIndex() throws Exception {
        JestResult jr = jestClient.execute(new CreateIndex.Builder(indexName).build());
        System.out.println(jr.isSucceeded());
    }

    /**
     * 新增数据
     * @return
     * @throws Exception
     */
    @Test
    public void insert() throws Exception {
        User user = new User(1L, "张三", 20, "张三是个Java开发工程师","2018-4-25 11:07:42");
        Index index = new Index.Builder(user).index(indexName).type(typeName).build();
        try{
            JestResult jr = jestClient.execute(index);
            System.out.println(jr.isSucceeded());
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    /**
     * 查询数据
     * @return
     * @throws Exception
     */
    @Test
    public void getIndexMapping() throws Exception {
        GetMapping getMapping = new GetMapping.Builder().addIndex(indexName).addType(typeName).build();
        JestResult jr =jestClient.execute(getMapping);
        System.out.println(jr.getJsonString());
    }

    /**
     * 向ElasticSearch中批量新增
     */
    @Test
    public void insertBatch(){
        List<Object> objs = new ArrayList<Object>();
        objs.add(new User(1L, "张三三", 20, "张三是个Java开发工程师","2018-4-25 11:07:42"));
        objs.add(new User(2L, "李四四", 24, "李四是个测试工程师","1980-2-15 19:01:32"));
        objs.add(new User(3L, "王五五", 25, "王五是个运维工程师","2018-4-24 06:11:32"));
        boolean result = false;
        try {
            Bulk.Builder bulk = new Bulk.Builder().defaultIndex(indexName).defaultType(typeName);
            for (Object obj : objs) {
                Index index = new Index.Builder(obj).build();
                bulk.addAction(index);
            }
            BulkResult br = jestClient.execute(bulk.build());
            result = br.isSucceeded();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("批量新增:"+result);
    }

    /**
     * 全文搜索
     * @param indexName
     * @param typeName
     * @param query
     * @return
     * @throws Exception
     */
    public static String search(JestClient jestClient,String indexName, String typeName, String query) throws Exception {
        Search search = new Search.Builder(query).addIndex(indexName).addType(typeName).build();
        JestResult jr = jestClient.execute(search);
        System.out.println("--++"+jr.getJsonString());
        System.out.println("--"+jr.getSourceAsObject(User.class));
        return jr.getSourceAsString();
    }

    /**
     * 分页带条件搜索
     */
    @Test
    public  void serach1() {
        String query ="工程师";
        try {
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(QueryBuilders.queryStringQuery(query));
            //分页设置
            searchSourceBuilder.from(0).size(2);
            System.out.println("全文搜索查询语句:"+searchSourceBuilder.toString());
            System.out.println("全文搜索返回结果:"+search(jestClient,indexName, typeName, searchSourceBuilder.toString()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 精确搜索(在指定的属性上精确查询)
     */
    @Test
    public  void serach2() {
        try {
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(QueryBuilders.termQuery("age", 24));
            System.out.println("精确搜索查询语句:"+searchSourceBuilder.toString());
            System.out.println("精确搜索返回结果:"+search(jestClient,indexName, typeName, searchSourceBuilder.toString()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 区间搜索
     */
    @Test
    public  void serach3() {
        String createtm="createtm";
        String from="2016-6-21 05:11:32";
        String to="2018-08-21 06:11:32";

        try {
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(QueryBuilders.rangeQuery(createtm).gte(from).lte(to));
            System.out.println("区间搜索语句:"+searchSourceBuilder.toString());
            System.out.println("区间搜索返回结果:"+search(jestClient,indexName, typeName, searchSourceBuilder.toString()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 删除索引
     * @return
     * @throws Exception
     */
    @Test
    public void deleteIndex() throws Exception{
        JestResult jr = jestClient.execute(new DeleteIndex.Builder(indexName).build());
        System.out.println(jr.isSucceeded());
    }

    /**
     * 删除单条数据,  这个id必须是主键才能被删除
     * @return
     * @throws Exception
     */
    @Test
    public void deleteData()throws Exception{
        String id = "1";
        DocumentResult dr = jestClient.execute(new Delete.Builder(id).index(indexName).type(typeName).build());
        System.out.println(dr.isSucceeded());
    }


组合查询与排序

searchSourceBuilder.query(QueryBuilders.rangeQuery(createtm).gte(from).lte(to)).query(QueryBuilders.termQuery("age", 24));   --组合查询
searchSourceBuilder.sort("age", SortOrder.DESC);     //排序                                                                  --排序




注:测试之前先说明下,本地windows系统安装的是ElasticSearch版本是5.6.7。

测试结果

全文搜索

全文搜索查询语句:{
  "from" : 0,
  "size" : 2,
  "query" : {
    "query_string" : {
      "query" : "工程师"
    }
  }
}

全文搜索返回结果:{"id":1,"name":"张三","age":20,"description":"张三是个Java开发工程师","createtm":"2018-4-25 11:07:42"},{"id":2,"name":"李四","age":24,"description":"李四是个测试工程师","createtm":"1980-2-15 19:01:32"}


匹配搜索

精确搜索查询语句:{
  "query" : {
    "term" : {
      "age" : 24
    }
  }
}

精确搜索返回结果:{"id":2,"name":"李四","age":24,"description":"李四是个测试工程师","createtm":"1980-2-15 19:01:32"}


时间区间搜索

区间搜索语句:{
  "query" : {
    "range" : {
      "createtm" : {
        "from" : "2016-8-21 06:11:32",
        "to" : "2018-8-21 06:11:32",
        "include_lower" : true,
        "include_upper" : true
      }
    }
  }
}
区间搜索返回结果:{"id":1,"name":"张三","age":20,"description":"张三是个Java开发工程师","createtm":"2018-4-25 11:07:42"}


新增完数据之后,我们可以上linux的 Kibana中进行相关的查询,查询结果如下:

注:Kibana 是属于ELK中一个开源软件。Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

上述代码中测试返回的结果符合我们的预期。其中关于JestClient只是用到了很少的一部分,更多的使用可以查看JestClient的官方文档。

Windows安装ElasticSearch

1,文件准备
下载地址:
https://www.elastic.co/downloads
选择ElasticSearch相关版本, 然后选择后缀名为ZIP文件进行下载,下载之后进行解压。

2,启动Elasticsearch
进入bin目录下,运行 elasticsearch.bat
然后在浏览上输入: localhost:9200
成功显示一下界面表示成功!
image.png


3,安装ES插件
web管理界面head 安装
进入bin目录下,打开cmd,进入dos界面
输入:plugin install mobz/elasticsearch-head
进行下载
成功下载之后,在浏览器输入:http://localhost:9200/_plugin/head/
若显示一下界面,则安装成功!

4,注册服务
进入bin目录下,打开cmd,进入dos界面
依次输入:
service.bat install
service.bat start
成功之后,再输入
services.msc
跳转到Service服务界面,可以直接查看es的运行状态!


Home