自学笔记-SpringBoot集成ElasticSearch

目录

  • 一、ElasticSearch介绍:
  • 二、ElasticSearch安装:
  • 三、Kibana的安装
  • 四、配置ik分词器
  • 五、Springboot集成ElasticSearch
    • Ⅰ.依赖
    • Ⅱ.配置
    • Ⅲ.基础代码
      • 1.实现ES创建索引功能
      • 2.实现判断ES索引是否存在
      • 3.实现删除ES索引功能
      • 4.实现使用实体类创建ES索引
      • 5.实现判断ES的索引内部id的功能
      • 6.实现获取ES对应索引的文档信息功能
      • 7.实现更新文档请求功能
      • 8.实现删除文档请求功能
      • 9.实现ES的批处理请求功能
      • 10.实现ES基础查询操作:精确匹配,匹配所有,分页
      • 11.实现ES查询所有索引功能
      • 12.列表展示(支持同时对所需字段排序,关键字检索及分页操作)

一、ElasticSearch介绍:

Elaticsearch,简称为ES,ES是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别(大数据时代)的数据。ES由 Java 语言开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTFULL API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。据国际权威的数据库产品评测机构 DB Engines 的统计,在2016 年1月,ElasticSearch 已超过 Solr 等,成为排名第一的搜索引擎类应用。

二、ElasticSearch安装:

先安装前段环境
Node.js
自学笔记-SpringBoot集成ElasticSearch_第1张图片

查看环境变量和版本
自学笔记-SpringBoot集成ElasticSearch_第2张图片

打开
自学笔记-SpringBoot集成ElasticSearch_第3张图片

访问测试!
自学笔记-SpringBoot集成ElasticSearch_第4张图片

三、Kibana的安装

安装淘宝镜像
自学笔记-SpringBoot集成ElasticSearch_第5张图片

查看cnpm是否真安装成功
自学笔记-SpringBoot集成ElasticSearch_第6张图片

下载依赖
自学笔记-SpringBoot集成ElasticSearch_第7张图片

启动
自学笔记-SpringBoot集成ElasticSearch_第8张图片

访问
自学笔记-SpringBoot集成ElasticSearch_第9张图片

解决跨域问题
自学笔记-SpringBoot集成ElasticSearch_第10张图片

连接变绿!
自学笔记-SpringBoot集成ElasticSearch_第11张图片

Kibana可以将es的数据通过友好的页面展示出来 ,提供实时分析的功能。

可以见到,默认端口 5601
自学笔记-SpringBoot集成ElasticSearch_第12张图片

访问进入页面
自学笔记-SpringBoot集成ElasticSearch_第13张图片

访问测试
自学笔记-SpringBoot集成ElasticSearch_第14张图片

四、配置ik分词器

将ik放入ElasticSearch中
自学笔记-SpringBoot集成ElasticSearch_第15张图片

重启es,发现加入插件(ik)
自学笔记-SpringBoot集成ElasticSearch_第16张图片

ik_smart 最少切分
自学笔记-SpringBoot集成ElasticSearch_第17张图片

ik_max_word 最细粒度划分
自学笔记-SpringBoot集成ElasticSearch_第18张图片

ik分词器增加自己的配置

字典:
自学笔记-SpringBoot集成ElasticSearch_第19张图片

编写自己的配置文件注入到扩展配置中
自学笔记-SpringBoot集成ElasticSearch_第20张图片
自学笔记-SpringBoot集成ElasticSearch_第21张图片

再次测试
自学笔记-SpringBoot集成ElasticSearch_第22张图片
自学笔记-SpringBoot集成ElasticSearch_第23张图片

基本Rest风格说明

PUT命令

PUT 

自学笔记-SpringBoot集成ElasticSearch_第24张图片
自学笔记-SpringBoot集成ElasticSearch_第25张图片

失败(超时)解决办法:先把es下的jvm.options里的两个1g都改成2g,然后把kibana里的配置文件请求时间扩大一倍

单纯建索引
自学笔记-SpringBoot集成ElasticSearch_第26张图片
自学笔记-SpringBoot集成ElasticSearch_第27张图片
GET操作
自学笔记-SpringBoot集成ElasticSearch_第28张图片
自学笔记-SpringBoot集成ElasticSearch_第29张图片

启用默认的数据
自学笔记-SpringBoot集成ElasticSearch_第30张图片
自学笔记-SpringBoot集成ElasticSearch_第31张图片

修改更新
自学笔记-SpringBoot集成ElasticSearch_第32张图片
自学笔记-SpringBoot集成ElasticSearch_第33张图片

删除
自学笔记-SpringBoot集成ElasticSearch_第34张图片
自学笔记-SpringBoot集成ElasticSearch_第35张图片

五、Springboot集成ElasticSearch

Ⅰ.依赖

    <properties>
        <maven.compiler.source>11maven.compiler.source>
        <maven.compiler.target>11maven.compiler.target>
        <es.version>7.9.1es.version>
    properties>

<dependencies>
        
        <dependency>
            <groupId>org.elasticsearchgroupId>
            <artifactId>elasticsearchartifactId>
            <version>${es.version}version>
        dependency>

        <dependency>
            <groupId>org.elasticsearch.clientgroupId>
            <artifactId>transportartifactId>
            <version>${es.version}version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logginggroupId>
                    <artifactId>commons-loggingartifactId>
                exclusion>
            exclusions>
        dependency>

        <dependency>
            
            <groupId>org.elasticsearch.plugingroupId>
            <artifactId>transport-netty4-clientartifactId>
            <version>${es.version}version>
        dependency>

        <dependency>
            <groupId>org.elasticsearch.clientgroupId>
            <artifactId>elasticsearch-rest-clientartifactId>
            <version>${es.version}version>
        dependency>

        <dependency>
            <groupId>org.elasticsearch.clientgroupId>
            <artifactId>elasticsearch-rest-high-level-clientartifactId>
            <version>${es.version}version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logginggroupId>
                    <artifactId>commons-loggingartifactId>
                exclusion>
                <exclusion>
                    <groupId>org.elasticsearch.clientgroupId>
                    <artifactId>elasticsearch-rest-clientartifactId>
                exclusion>
            exclusions>
        dependency>
    dependencies>

Ⅱ.配置

@Configuration
public class ElasticSearchClientConfig {
    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
            RestClient.builder(
                    new HttpHost("127.0.0.1",9200,"http")
            )
        );
        return client;
    }
}

Ⅲ.基础代码

1.实现ES创建索引功能

@Test
void testCreateIndex() throws IOException {
    //创建索引请求
    CreateIndexRequest request = new CreateIndexRequest("hzh_index");
    //客户端请求
    CreateIndexResponse createIndexResponse =
            client.indices().create(request, RequestOptions.DEFAULT);

    System.out.println(createIndexResponse);
}

2.实现判断ES索引是否存在

@Test
void testExistIndex() throws IOException {
    GetIndexRequest request = new GetIndexRequest("hzh_index");
    boolean exist = client.indices().exists(request,RequestOptions.DEFAULT);
    System.out.println(exist);
}

3.实现删除ES索引功能

@Test
void testDeleteIndex() throws IOException {
    DeleteIndexRequest request = new DeleteIndexRequest("hzh_index");
    AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
    System.out.println(delete);
}

4.实现使用实体类创建ES索引

@Test
void testAddDocument() throws IOException {
    //创建对象
    User user = new User("HZH",3);
    IndexRequest request = new IndexRequest("hzh_index");
    request.id("1");
    request.timeout(TimeValue.timeValueSeconds(1));//一秒钟
    request.timeout("1s");

    //将我们的数据放入json
    request.source(JSON.toJSONString(user), XContentType.JSON);

    //客户端发送请求
    IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);

    System.out.println(indexResponse.toString());//
    System.out.println(indexResponse.status()); //对应我们命令返回的状态
}

5.实现判断ES的索引内部id的功能

@Test
void testIsExist() throws IOException {
    GetRequest getRequest = new GetRequest("hzh_index","dK6jnXoBhRewEAABR0QT");
    //不获取返回值的上下文
    getRequest.fetchSourceContext(new FetchSourceContext(false));
    getRequest.storedFields("_none_");

    boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
    System.out.println(exists);
}

6.实现获取ES对应索引的文档信息功能

@Test
void testGetDocument() throws IOException {
    GetRequest getRequest = new GetRequest("hzh_index", "1");
    GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
    System.out.println(getResponse.getSourceAsString());    //打印文档的内容
    System.out.println(getResponse);    //打印全部内容
}

7.实现更新文档请求功能

@Test
void testUpdateDocument() throws IOException{
    UpdateRequest updateRequest = new UpdateRequest("hzh_index","1");
    updateRequest.timeout("1s");

    User user = new User("HZH2", 5);
    updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);

    UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
    System.out.println(update.status());
}

8.实现删除文档请求功能

@Test
void testDeleteDocument() throws IOException{
    DeleteRequest deleteRequest = new DeleteRequest("hzh_index", "1");
    deleteRequest.timeout("1s");

    DeleteResponse delete = client.delete(deleteRequest, RequestOptions.DEFAULT);

    System.out.println(delete.status());
}

9.实现ES的批处理请求功能

    @Test
    void testBulkRequest() throws IOException{
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");

        List<User> lists = new ArrayList<>();
        for(int i=0;i<=20;i++){
            lists.add(new User("hzh",i));
        }



        //批处理请求
        for(int i=0;i<lists.size();i++){
            bulkRequest.add(
                    new IndexRequest("hzh_index")
                            .id(""+(i+1))
                            .source(JSON.toJSONString(lists.get(i)),XContentType.JSON)
            );
        }
        BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulkResponse.hasFailures());
    }

10.实现ES基础查询操作:精确匹配,匹配所有,分页

@Test
void testSearch() throws IOException {
    SearchRequest searchRequest = new SearchRequest("hzh_index");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    //精确匹配
    //TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "hzh");
    //匹配所有
    MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();

    searchSourceBuilder.query(matchAllQueryBuilder);
    //分页
    searchSourceBuilder.from(0);
    searchSourceBuilder.size(1);
    searchSourceBuilder.timeout(new TimeValue(120, TimeUnit.SECONDS));

    searchRequest.source(searchSourceBuilder);
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    System.out.println(JSON.toJSONString(searchResponse.getHits()));
    System.out.println("-----------------------");
    int index = 0;
    for(SearchHit documentFields:searchResponse.getHits()){
        index++;
        System.out.println(documentFields.getSourceAsString()+"\n");
    }
    System.out.println("index = "+index);
}

11.实现ES查询所有索引功能

@Test
void testFindAllIndex() throws IOException {
    GetAliasesRequest getAliasesRequest = new GetAliasesRequest();
    getAliasesRequest.masterNodeTimeout(new TimeValue(60,TimeUnit.SECONDS));
    GetAliasesResponse alias = client.indices().getAlias(getAliasesRequest,RequestOptions.DEFAULT);
    Map<String, Set<AliasMetadata>> aliases = alias.getAliases();
    for (String key : aliases.keySet()) {
        System.out.println("Key = " + key);
    }
}

12.列表展示(支持同时对所需字段排序,关键字检索及分页操作)

@Test
void takeJsonStr() throws IOException {
    SearchRequest searchRequest = new SearchRequest("hzh_index");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    //精确匹配
    TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("_id", "-322inoBKIkXtm6iIwBi");
    WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery("name","*魂*");
    //匹配所有
    MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();

    //searchSourceBuilder.query(matchAllQueryBuilder);
    searchSourceBuilder.query(wildcardQueryBuilder);

    searchSourceBuilder.sort("_id",SortOrder.DESC);
    //分页
    searchSourceBuilder.from(0);
    searchSourceBuilder.size(3);
    searchSourceBuilder.timeout(new TimeValue(120, TimeUnit.SECONDS));

    searchRequest.source(searchSourceBuilder);
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

    int index = 0;
    for(SearchHit documentFields:searchResponse.getHits()){
        String oriStr = JSON.toJSONString(searchResponse.getHits());
        JSONObject strToJson = JSONObject.parseObject(oriStr);
        System.out.println(strToJson);
        String strId = strToJson.getJSONArray("hits").getJSONObject(0).getString("id");
        System.out.println("d-----------------------");
        System.out.println("strId: " + strId);

        JSONObject json = JSONObject.parseObject(documentFields.getSourceAsString());
        //System.out.println(json);
        System.out.println(json.getString("name"));
        System.out.println(json.getString("en_name"));
        System.out.println(json.getJSONArray("nodes").toJSONString());
        System.out.println("u-----------------------");
        index++;
    }
    System.out.println("index = "+index);
}

你可能感兴趣的:(自学笔记,elasticsearch,java,spring,boot)