ElasticSearch

根据以下学习视频,个人整理的笔记

https://www.bilibili.com/video/BV17a4y1x7zq?spm_id_from=333.999.0.0

ElasticSearch

版本:ElasticSearch 7.6.1

6.X版本和7.X版本的区别十分大!

ElasticSearch:搜索!

以后只要需要用到搜索,就可以使用ES(ElasticSearch),建议是在大数据量的情况下使用

聊聊Doug Cutting

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

回到主题

Lucene是一套信息检索工具包!jar包!不包含搜索引擎系统!

Lucene包含:索引结构、读写索引的工具、工具类(排序,搜索规则)…

Lucene和ElasticSearch的关系:ElasticSearch是基于Lucene做了一些封装和增强(我们上手是十分简单的!)

ElasticSearch概述

ElasticSearch,简称es。es是一个开源的高拓展分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用java开发使用Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

据国际权威的数据库产品评测机构DB Engines的统计,在2016年1月,ElasticSearch已经超过Solr等,成为排名第一的搜索引擎类应用。

历史

在这里插入图片描述

谁在使用

在这里插入图片描述

ES和Solr的差别

ES简介

在这里插入图片描述

Solr简介

在这里插入图片描述

Lucene简介

在这里插入图片描述

ES和Solr的比较

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

ES安装

环境说明:JDK1.8(最低要求)

ES官网:https://www.elastic.co

下载ES可以到官网下载。

我们学习ES的话,在Windows和Linux下都可以进行学习。我们这里在Windows下学习ES

Windows下安装ES

1、解压就可以使用了

在这里插入图片描述

2、熟悉目录

bin 启动文件
config 配置文件
	log4j2.properties 日志配置文件
	jvm.options		  Java虚拟机相关的配置
	elasticsearch.yml ES的配置文件(默认端口:9200)
lib 相关jar包
logs 日志
modules 功能模块
plugins 插件(ik分词器)

3、启动,访问9200端口

在这里插入图片描述

安装ES的可视化界面head

(需要有Node.js的相关环境)

1、下载地址:https://github.com/mobz/elasticsearch-head/

2、下载相关依赖,使用cnpm下载比npm下载快在这里插入图片描述

3、启动,访问9100端口

在这里插入图片描述

4、解决跨域问题,修改ES的配置文件elasticsearch.yml

# 开启跨域支持,并且让所有人访问
http.cors.enabled: true
http.cors.allow-origin: "*"

在这里插入图片描述

5、重启ES,重新连接ES

在这里插入图片描述

6、新建索引(可以把索引想象成数据库)

在这里插入图片描述

这个head我们就把它当做数据展示工具!我们后面所有的查询,用Kibana

了解一下ELK

在这里插入图片描述

Kibana的安装

在这里插入图片描述

Kibana官网:https://www.elastic.co/cn/kibana

Kibana的版本要和ES的版本一致

1、下载

2、解压

3、目录

在这里插入图片描述

4、启动测试,访问5601端口

运行Kibana.bat,如果启动失败,报错大概意思是已经存在一个启动的Kibana了,但明明是第一次启动

解决方案:

查看这两个网址的响应(需要先启动elasticsearch)
http://localhost:9200/_cat/indices
http://localhost:9200/_cat/aliases
其中一个应该会显示出.kibana_task_manager_1,这就是资源已存在的原因了

在cmd下运行以下命令

curl -X DELETE http://localhost:9200/.kibana*

这时再回到网址刷新后会发现.kibana_task_manager_1已消失,此时再启动Kibana,可正常使用

在这里插入图片描述

5、开发工具

在这里插入图片描述

我们之后的所有操作都在这里进行编写!

ES核心概念

在这里插入图片描述

物理设计:

elasticsearch在后台把每个索引划分成多个分片,每分分片可以在集群中的不同服务器间迁移

一个人就是一个集群,默认的集群名称就是elasticsearch

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

索引

在这里插入图片描述

在这里插入图片描述

倒排索引

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

IK分词器的插件

在这里插入图片描述

安装

1、下载,https://github.com/medcl/elasticsearch-analysis-ik

2、下载完毕之后,解压到我们的elasticsearch的插件目录下即可!

在这里插入图片描述

3、重启ES,可以看到ik分词器插件被加载了

在这里插入图片描述

4、使用Kibana测试

查看不同的分词器效果

在这里插入图片描述

在这里插入图片描述

IK分词器增加自己的配置

1、新建词典,并且在配置文件中注入自己新建的词典

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、重启ES

在这里插入图片描述

3、重启Kibana,测试一下

在这里插入图片描述

Rest风格说明

在这里插入图片描述

关于索引的基本操作

添加索引测试

1、创建一个索引,并且添加文档!

PUT /索引名/类型名(如果不写,则默认是 _doc )/文档ID
{
	请求体
}

在这里插入图片描述

完成了自动增加了索引!数据也成功地添加了,这就是我说大家在初期可以把它当做数据库学习的原因

在这里插入图片描述

那么name这个字段用不用指定类型呢,毕竟我们关系型数据库是需要指定类型的啊!

  • 字符串类型
    • text、keyword
  • 数值类型
    • long、integer、short、byte、double、float、half_float、scaled_float
  • 日期类型
    • date
  • 布尔值类型
    • boolean
  • 二进制类型
    • binary
  • 等等…

2、下面这个是单纯地创建索引的具体规则,并没有添加数据

在这里插入图片描述

3、可以通过GET请求获得具体的信息

在这里插入图片描述

4、查看默认的信息

在这里插入图片描述

如果自己的文档字段没有指定类型,那么ES就会给我们默认配置字段类型!

扩展命令

通过 GET _cat/ 命令可以获得ES当前的很多信息

在这里插入图片描述

修改索引测试

  • 直接覆盖

在这里插入图片描述

  • 通过POST进行修改

在这里插入图片描述

删除索引

在这里插入图片描述

通过DELETE命令实现删除,根据你的请求来判断是删除索引还是删除文档记录!

关于文档的基本操作(重点)

基本操作

  • 添加数据

在这里插入图片描述

  • 获取数据

在这里插入图片描述

  • 通过 PUT 更新数据

在这里插入图片描述

  • 通过 POST 更新数据

在这里插入图片描述

  • 简单的条件查询

可以根据默认的映射规则,产生基本的查询!

在这里插入图片描述

复杂的条件查询

  • 查询

在这里插入图片描述

在这里插入图片描述

  • 过滤查询

在这里插入图片描述

  • 排序查询

在这里插入图片描述

  • 分页查询

在这里插入图片描述

  • must(所有条件都要满足)

在这里插入图片描述

  • should(满足其中一个条件即可)

在这里插入图片描述

  • not

在这里插入图片描述

  • 过滤器
    • gt(大于)
    • gte(大于等于)
    • lt(小于)
    • lte(小于等于)

在这里插入图片描述

在这里插入图片描述

  • 匹配多个条件

在这里插入图片描述

  • 精确查询

term 查询是通过倒排索引实现精确查询的

keyword类型的字段不会被分词器解析

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 多个值匹配的精确查询

在这里插入图片描述

  • 高亮查询

在这里插入图片描述

在这里插入图片描述

SpringBoot集成ES

基本思路:

1、找到原生的依赖

在这里插入图片描述

2、找对象

在这里插入图片描述

3、分析这个类里面的方法即可!

测试一下:

新建一个空项目

在这里插入图片描述

新建一个SpringBoot的Module模块

在这里插入图片描述

导入相关依赖

在这里插入图片描述

给空项目配置相关JDK环境

在这里插入图片描述

一定要保证我们导入的ES依赖和我们本地使用的ES依赖的版本一致

在这里插入图片描述

配置 ElasticSearchClientConfig

package com.kuang.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// 狂神的Spring两个步骤
// 1、找对象
// 2、放到Spring中待用
// 3、如果是SpringBoot就先分析源码(xxxAutoConfiguration、xxxProperties)
@Configuration
public class ElasticSearchClientConfig {

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

}

关于索引的API操作

  • 创建索引
package com.kuang;

import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.io.IOException;

@SpringBootTest
class KuangshenEsApiApplicationTests {

    @Resource
    private RestHighLevelClient restHighLevelClient;

    // 测试索引的创建
    @Test
    void testCreateIndex() throws IOException {
        // 1、创建索引请求
        CreateIndexRequest request = new CreateIndexRequest("kuang_index");
        // 2、客户端执行创建请求,请求后获得响应
        CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
        // 3、打印一下响应的信息
        System.out.println(createIndexResponse);
    }

}

结果展示

在这里插入图片描述

  • 获取索引
package com.kuang;

import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.io.IOException;

@SpringBootTest
class KuangshenEsApiApplicationTests {

    @Resource
    private RestHighLevelClient restHighLevelClient;

    // 测试索引的获取,只能判断是否存在
    @Test
    void testExistIndex() throws IOException {
        // 1、获取索引请求
        GetIndexRequest request = new GetIndexRequest("kuang_index");
        // 2、客户端执行获取请求,请求后获得响应
        boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
        // 3、打印一下响应的信息
        System.out.println(exists);
    }

}
  • 删除索引
package com.kuang;

import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.io.IOException;

@SpringBootTest
class KuangshenEsApiApplicationTests {

    @Resource
    private RestHighLevelClient restHighLevelClient;

    // 测试索引的删除
    @Test
    void testDeleteIndex() throws IOException {
        // 1、删除索引请求
        DeleteIndexRequest request = new DeleteIndexRequest("kuang_index");
        // 2、客户端执行获取请求,请求后获得响应
        AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
        // 3、打印一下响应的信息
        System.out.println(delete.isAcknowledged());
    }

}

关于文档的API操作

先创建一个实体类

package com.kuang.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class User {
    private String name;
    private int age;
}

导入fastjson依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>
  • 添加文档
package com.kuang;

import com.alibaba.fastjson.JSON;
import com.kuang.pojo.User;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.io.IOException;

@SpringBootTest
class KuangshenEsApiApplicationTests {

    @Resource
    private RestHighLevelClient restHighLevelClient;

    // 测试添加文档
    @Test
    void testAddDocument() throws IOException {
        // 创建对象
        User user = new User("狂神说",3);

        // 创建请求
        IndexRequest request = new IndexRequest("kuang_index");
        // 规则
        request.id("1");
        request.timeout(TimeValue.timeValueSeconds(1));
        request.timeout("1ms");
        // 将我们的数据放入请求
        request.source(JSON.toJSONString(user), XContentType.JSON);

        // 客户端发送请求,获取响应的结果
        IndexResponse indexResponse = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        System.out.println(indexResponse);
        System.out.println(indexResponse.status());
        

    }

}
  • 获取文档(判断文档是否存在)
package com.kuang;

import com.alibaba.fastjson.JSON;
import com.kuang.pojo.User;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.io.IOException;

@SpringBootTest
class KuangshenEsApiApplicationTests {

    @Resource
    private RestHighLevelClient restHighLevelClient;

    // 测试获取文档
    @Test
    void testIsExists() throws IOException {
        // 创建请求
        GetRequest getRequest = new GetRequest("kuang_index","1");
        // 不获取返回的 _source 的上下文
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        // getRequest.storedFields("_none_");
        // 客户端发送请求
        boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);

    }

}
  • 获取文档信息
package com.kuang;

import com.alibaba.fastjson.JSON;
import com.kuang.pojo.User;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.io.IOException;

@SpringBootTest
class KuangshenEsApiApplicationTests {

    @Resource
    private RestHighLevelClient restHighLevelClient;

    // 测试获取文档信息
    @Test
    void testGetDocument() throws IOException {
        // 创建请求
        GetRequest getRequest = new GetRequest("kuang_index","1");
        GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
        // 打印文档内容
        System.out.println(getResponse.getSourceAsString());
        System.out.println(getResponse);// 这里的返回内容和在Kibana输入命令后返回的是一样的
    }


}
  • 更新文档
package com.kuang;

import com.alibaba.fastjson.JSON;
import com.kuang.pojo.User;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.io.IOException;

@SpringBootTest
class KuangshenEsApiApplicationTests {

    @Resource
    private RestHighLevelClient restHighLevelClient;

    // 测试更新文档的信息
    @Test
    void testUpdateDocument() throws IOException {
        // 创建请求
        UpdateRequest updateRequest = new UpdateRequest("kuang_index","1");
        updateRequest.timeout("1s");
        User user = new User("狂神说Java", 18);
        updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
        
        // 客户端执行请求
        UpdateResponse updateResponse = restHighLevelClient.update(updateRequest,RequestOptions.DEFAULT);
        System.out.println(updateResponse.status());
    }

}
  • 删除文档记录
package com.kuang;

import com.alibaba.fastjson.JSON;
import com.kuang.pojo.User;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.io.IOException;

@SpringBootTest
class KuangshenEsApiApplicationTests {

    @Resource
    private RestHighLevelClient restHighLevelClient;

    // 测试删除文档的信息
    @Test
    void testDeleteDocument() throws IOException {
        // 创建请求
        DeleteRequest deleteRequest = new DeleteRequest("kuang_index", "1");
        deleteRequest.timeout("1s");
        // 客户端执行请求
        DeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println(deleteResponse.status());
    }
}
  • 批量插入
package com.kuang;

import com.alibaba.fastjson.JSON;
import com.kuang.pojo.User;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;

@SpringBootTest
class KuangshenEsApiApplicationTests {

    @Resource
    private RestHighLevelClient restHighLevelClient;

    // 真实的项目一般都会批量插入数据
    @Test
    void testBulkRequest() throws IOException {
        // 创建请求
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");

        ArrayList<User> userList = new ArrayList<>();
        userList.add(new User("kuangshen1",3));
        userList.add(new User("kuangshen2",3));
        userList.add(new User("kuangshen3",3));
        userList.add(new User("qinjiang1",3));
        userList.add(new User("qinjiang2",3));
        userList.add(new User("qinjiang3",3));

        // 批处理请求
        for (int i = 0; i < userList.size(); i++) {
            // 批量更新和批量删除和这里的批量添加差不多
            bulkRequest.add(
                    new IndexRequest("kuang_index")
                            .id(""+(i+1))
                            .source(JSON.toJSONString(userList.get(i)),XContentType.JSON)
            );
        }
        // 客户端执行请求
        BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulkResponse.hasFailures());// false代表没有失败
    }
}
  • 查询
package com.kuang;

import com.alibaba.fastjson.JSON;
import com.kuang.pojo.User;
import org.apache.lucene.queryparser.flexible.core.builders.QueryBuilder;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.MatchAllQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;

@SpringBootTest
class KuangshenEsApiApplicationTests {

    @Resource
    private RestHighLevelClient restHighLevelClient;

    @Test
    void testSearch() throws IOException {
        // 创建请求
        SearchRequest searchRequest = new SearchRequest("kuang_index");

        // 构建搜索的条件
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        // 查询条件,我们可以使用 QueryBuilders 工具类来实现
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "qinjiang1");// 精确匹配
        // MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();// 匹配所有
        searchSourceBuilder.query(termQueryBuilder);
        /**
         * 分页
         * searchSourceBuilder.from();
         * searchSourceBuilder.size();
          */
        searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

        searchRequest.source(searchSourceBuilder);// 把搜索条件放到请求里面

        // 客户端执行请求
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(searchResponse.getHits()));
        System.out.println("==========================");
        for (SearchHit documentFields : searchResponse.getHits().getHits()) {
            System.out.println(documentFields.getSourceAsMap());
        }

    }
}

ES实战(无法完成!了解即可!)

项目搭建

新建一个SpringBoot的Module

在这里插入图片描述

勾选相关依赖

在这里插入图片描述

自定义ES版本,并且导入fastjson依赖

在这里插入图片描述

导入静态资源,配置项目的端口号,写一个Controller简单测试一下即可

爬取数据

爬取数据:获取请求返回的页面信息,筛选出我们想要的数据就可以了!

JSoup包!

1、导入JSoup依赖

<!--解析网页jsoup-->
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.10.2</version>
</dependency>

京东页面应该做了处理,暂时无法爬取数据!!!

业务编写

前后端交互

关键字高亮实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值