秦皇岛网站关键词推广,新闻稿范文300字,做网站的学什么,excel表如何做网站连接在企业环境中#xff0c;Elasticsearch对文档操作的支持不仅是实现高效搜索的关键#xff0c;更是数据驱动决策的重要支柱。它通过强大的索引机制和灵活的查询语言#xff0c;使企业能够实时处理和分析海量文档数据#xff0c;迅速获取有价值的洞察#xff0c;从而加速创新… 在企业环境中Elasticsearch对文档操作的支持不仅是实现高效搜索的关键更是数据驱动决策的重要支柱。它通过强大的索引机制和灵活的查询语言使企业能够实时处理和分析海量文档数据迅速获取有价值的洞察从而加速创新、优化运营并提升客户体验。 Elasticsearch让文档管理从简单的存储检索升级为智能信息发掘成为现代企业不可或缺的数据处理引擎。 目录
文档的CRUD
基于Kibana控制台操作
新增文档
查询文档
修改文档
全量修改
局部修改
删除文档
基于Java REST Client 实现
准备依赖
准备实体类
初始化RestHighLevelClient
查询文档
删除文档
批处理操作文档 elasticsearch是面向文档Document存储的可以是数据库中的一条商品数据一个订单信息。文档数据会被序列化为json格式后存储在elasticsearch中。
上文中我们有了索引库接下来就可以向索引库中添加数据了。
Elasticsearch中的数据其实就是JSON风格的文档。操作文档自然保护增、删、改、查等几种常见操作。
文档的CRUD
基于Kibana控制台操作
新增文档
# 新增文档
POST /user/_doc/1
{info: 我们都会找到好工作,email: zyitcast.cn,name: {firstName: 云,lastName: 赵}
}
实现效果如下 查询文档
# 查询文档
GET /user/_doc/1
实现效果如下 修改文档
全量修改
# 全量修改
PUT /user/_doc/1
{info: 我们都会找到幸福,email: ZZZitcast.cn,name: {firstName: 云,lastName: 赵}
}
实现效果如下 局部修改
# 局部修改Java
POST /user/_update/1
{doc: {email: ZhaoYunitcast.cn}
}实现效果如下 删除文档
# 删除文档
DELETE /user/_doc/1
实现效果如下 基于Java REST Client 实现
准备依赖
上文导入了es的依赖 !-- mysql --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.31/version/dependency!-- mybatisPlus--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.3.1/version/dependency!--hutool工具包--dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.8.14/version/dependency准备一个数据库表毕竟是测试就建了一张表 准备实体类
准备普通实体类Item和引库结构对应的实体类ItemDoc
Data
EqualsAndHashCode(callSuper false)
Accessors(chain true)public class Item implements Serializable {private static final long serialVersionUID 1L;/*** 商品id*/private Long id;/*** SKU名称*/private String name;/*** 价格分*/private Integer price;/*** 库存数量*/private Integer stock;/*** 商品图片*/private String image;/*** 类目名称*/private String category;/*** 品牌名称*/private String brand;/*** 规格*/private String spec;/*** 销量*/private Integer sold;/*** 评论数*/private Integer commentCount;/*** 是否是推广广告true/false*/TableField(isAD)private Boolean isAD;/*** 商品状态 1-正常2-下架3-删除*/private Integer status;/*** 创建时间*/private LocalDateTime createTime;/*** 更新时间*/private LocalDateTime updateTime;/*** 创建人*/private Long creater;/*** 修改人*/private Long updater;}Data
public class ItemDoc {private String id;private String name;private Integer price;private String image;private String category;private String brand;private Integer sold;private Integer commentCount;TableField(isAD)private Boolean isAD;private LocalDateTime updateTime;}准备一个ItemMapper
Mapper
public interface ItemMapper extends BaseMapperItem {}
创建一个测试类ElasticDocTest
初始化RestHighLevelClient private RestHighLevelClient client;Autowiredprivate ItemMapper itemMapper;/*** 初始化ES客户端*/BeforeEachvoid setUp() {client new RestHighLevelClient(RestClient.builder(HttpHost.create(http://自己的虚拟机地址:9200)));}/*** 关闭ES客户端* throws IOException*/AfterEachvoid tearDown() throws IOException {if (client ! null) {client.close();}}/*** 测试连接*/Testvoid testConnection() {System.out.println(client client);}测试连接 连接ES客户端成功 新增文档 /*** 新增文档* throws IOException*/Testvoid testIndexDoc() throws IOException {// 1.根据id查询商品数据Item item itemMapper.selectById(11);// 2.转换为文档类型ItemDoc itemDoc BeanUtil.copyProperties(item, ItemDoc.class); // 修改类名// 3.将ItemDTO转jsonString doc JSONUtil.toJsonStr(itemDoc);// 1.准备Request对象IndexRequest request new IndexRequest(items).id(itemDoc.getId());// 2.准备Json文档request.source(doc, XContentType.JSON);// 3.发送请求client.index(request, RequestOptions.DEFAULT);}
查询文档 /*** 根据id查询文档* throws IOException*/Testvoid testGetDocumentById() throws IOException {// 1.准备Request对象GetRequest request new GetRequest(items).id(11);// 2.发送请求GetResponse response client.get(request, RequestOptions.DEFAULT);// 3.获取响应结果中的sourceString json response.getSourceAsString();ItemDoc itemDoc JSONUtil.toBean(json, ItemDoc.class);System.out.println(itemDoc itemDoc);}
实现效果如下: 验证新增文档和查询文档的成功了
修改文档 /*** 根据id更新文档* throws IOException*/Testvoid testUpdateDocument() throws IOException {// 1.准备RequestUpdateRequest request new UpdateRequest(items, 11);// 2.准备请求参数request.doc(price, 66666,commentCount, 1);// 3.发送请求client.update(request, RequestOptions.DEFAULT);}实现效果如下重新查询后与上图对比 删除文档 /*** 根据id删除文档* throws IOException*/Testvoid testDeleteDocument() throws IOException {// 1.准备Request两个参数第一个是索引库名第二个是文档idDeleteRequest request new DeleteRequest(items, 11);// 2.发送请求client.delete(request, RequestOptions.DEFAULT);}
实现效果如下重新查询后与上图对比 批处理操作文档
在之前的测试中我们都是操作单个文档。而数据库中的商品数据实际会达到数十万条某些项目中可能达到数百万条。
我们如果要将这些数据导入索引库肯定不能逐条导入而是采用批处理方案。
演示批量导入
Testvoid testLoadItemDoc() throws IOException {// 分页查询商品数据int pageNo 1;int size 100;while (true) {// 查询当前页数据PageItem page itemService.lambdaQuery().eq(Item::getStatus, 1).page(new Page(pageNo, size));// 获取当前页记录ListItem items page.getRecords();// 如果当前页没有数据退出循环if (CollUtil.isEmpty(items)) {log.info(所有数据已加载完成);break;}log.info(加载第{}页数据共{}条, pageNo, items.size());// 创建批量请求BulkRequest request new BulkRequest(items);// 遍历当前页数据添加到批量请求中for (Item item : items) {ItemDoc itemDoc BeanUtil.copyProperties(item, ItemDoc.class);request.add(new IndexRequest().id(itemDoc.getId()).source(JSONUtil.toJsonStr(itemDoc), XContentType.JSON));}// 发送批量请求client.bulk(request, RequestOptions.DEFAULT);// 如果没有下一页数据退出循环if (!page.hasNext()) {log.info(没有更多数据了);break;}// 翻页pageNo;}}
实现效果如下主要我就准备了15条