根据以下学习视频,个人整理的笔记
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>
京东页面应该做了处理,暂时无法爬取数据!!!