ElasticSearch批处理

  

      在刚才的新增当中,我们是一次新增一条数据。那么如果你将来的数据库里有数千上万的数据,你一次新增一个,那得多麻烦。所以我们还要学习一下批量导入功能。

        也就是说批量的把数据库的数据写入索引库。那这里的需求是,首先利用mybatisplus去批量查询酒店数据,然后将查询到的酒店数据,也就是hotel把它转换成我们的hotelDoc文档类型。最后再利用我们的这个Bulk批处理方式实现批量新增:

@Test
void testCreateHotelIndex() throws IOException{
//创建索引库 CreateIndexReqeust
//1、创建Request对象:
CreateIndexRequest request = new CreateIndexRequest("hotel");
//2、请求参数:
request.source(MAPPING_TEMPLATE, XContentType.JSON);
//3、发送请求
client.indices().create(request,RequestOptions.DEFAULT);
}

//1、创建DeleteIndexRequset
DeleteIndexReqeust reqeust = new DeleteIndexReqeust("hotel");
client.indices().delete(reqeust. ReqeustOptions.DEFAULT);

//判读索引库是否存在:
GetIndexReqeust request = new GetIndexRequest("hotel");

boolean exists = client.indices().exists(reqeust, RequestOptions.DEFAULT);





@Test
void testBulkRequest() throws IOException{

	List<Hotel> hotels = hoteService.list();
	BulkRequest request = new BulkRequest();
	for(Hotel hotel : hotels){
		HotelDoc hotelDoc = new HotelDoc(hotel);
		request.add(new IndexRequest("hotel"))
		             .id(hotelDoc.getId().toString())
		             .source(JSON.toJSONString(hotelDoc), XContentType.JSON);
	}
	//	 发送请求
	client.bulk(request,RequestOptions.DEFAULT);



}

用Stream+Map转换更优雅:

@Test
void testBulkRequest() throws IOException {
    List<Hotel> hotels = hoteService.list();
    BulkRequest request = new BulkRequest();
    
    hotels.stream()
          .map(hotel -> new HotelDoc(hotel))
          .forEach(hotelDoc -> {
              try {
                  request.add(new IndexRequest("hotel")
                                .id(hotelDoc.getId().toString())
                                .source(JSON.toJSONString(hotelDoc), XContentType.JSON));
              } catch (IOException e) {
                  // Handle exception
                  e.printStackTrace();
              }
          });
          
    client.bulk(request, RequestOptions.DEFAULT);
}

其实是把多个 IndexRequest的请求合并到BulkRequest 对象里,然后一次性完成提交,这种就叫批处理,确实没有什么新东西, 就是把以前的那种新增的代码给它合到一起去提交了。

接下来我们就来学习第一种全文检索查询。全文检索查询它会对用户输入的内容做分词以后进行匹配。比较常见的用于这个搜索框的这种搜索

match和multi_match的区别是什么?一个是根据单字段查询,一个是根据多字段。而multi_match参与查询的字段越多,性能越差,建议利用copy to把多个要查的字段拷贝到一个字段当中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/580804.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#基础|StringBuilder字符串如何高效处理。

哈喽&#xff0c;你好&#xff0c;我是雷工。 字符串处理在C#程序开发中是使用频率比较高的&#xff0c;但常规的字符串处理方式对内存占用比较多&#xff0c;为了优化内存&#xff0c;减少不必要的内存浪费&#xff0c;引入了StringBuilder类。 下面学习下StringBuilder类的使…

牛客NC99 多叉树的直径【较难 深度优先 Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/a77b4f3d84bf4a7891519ffee9376df3 思路 核心就是树的最大直径(globalMax)一定是以某一个node为root最长的两个path-to-leaf. 就是普通dfs的同时算路径长度。时间: O(n), DFS一次 空间: O(n)参考答案Java impo…

(二十一)C++自制植物大战僵尸游戏僵尸游戏关卡结束数据处理

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs 文件位置 代码实现的文件在Class\Scenes\GameScene文件夹中,如下图所示。 GameEndLayer.h class GSGameEndLayer :public LayerColor { public:CREATE_FUNC(GSGameEndLayer);void successfullEntry();void brea…

大田场景下的路径检测论文汇总

文章目录 2020Visual Servoing-based Navigation for Monitoring Row-Crop Fields 2020 Visual Servoing-based Navigation for Monitoring Row-Crop Fields code: https://github.com/PRBonn/visual-crop-row-navigation 摘要&#xff1a; 自主导航是野外机器人执行精确农业…

C++ day5

#include <iostream> using namespace std; class Person {string name;int *age; public:Person():name("zhangsan"),age(new int(18)){cout << "Person的无参构造" << endl;}Person(string name,int age):name("zhangsan"),…

喜报!得帆被评为2024年上海市重点服务独角兽企业

月23日&#xff0c;在市经济信息化委和闵行区政府指导下“2024年上海市重点服务独角兽&#xff08;潜力&#xff09;企业榜单发布会暨高质量发展产业对接会”在上海成功举办。 会上正式公布《2024年上海市重点服务独角兽&#xff08;潜力&#xff09;企业榜单》&#xff0c;上…

08_Scala函数式编程重点

文章目录 函数式编程1.创建简单函数2.可变参数3.默认参数4.函数式编程&#xff0c;代码简化 函数式编程 函数式编程是对功能进行封装&#xff0c;最终是需要等号 def test() {} //于python略有不同1.创建简单函数 // 1.定义函数def test(): Unit {}牛逼之处就是可以在m…

由于找不到msvcr120.dll,无法继续执行代码

在日常编程中&#xff0c;缺少关键的msvcr120.dll文件可能会导致代码无法执行&#xff0c;给我们带来不便。针对缺少msvcr120.dll文件的情况&#xff0c;我们可以采取一些有效的解决方法来解决这一问题。通过下载安装或使用Visual C Redistributable工具安装该msvcr120.dll文件…

数据结构四:线性表之带头结点的单向循环链表的设计

前面两篇介绍了线性表的顺序和链式存储结构&#xff0c;其中链式存储结构为单向链表&#xff08;即一个方向的有限长度、不循环的链表&#xff09;&#xff0c;对于单链表&#xff0c;由于每个节点只存储了向后的结点的地址&#xff0c;到了尾巴结点就停止了向后链的操作。也就…

STM32G431RBT6之LCD与LED配置

首先,配置时钟树,时钟树的配置在我的另外一篇博客里,这里不再赘述. LCD与LED具有共同的IO口,同时创建工程较好. 打开原理图,发现LED的IO口是PC8~PC15,还有一个容易看漏的PD2.LCD的IO口是PC0到PC15. 当然,看产品手册也可以知道,但是还是推荐大家看原理图. 打开cubumx,给PC0~PC…

如何讲好ppt演讲技巧(4篇)

如何讲好ppt演讲技巧&#xff08;4篇&#xff09; 如何讲好PPT演讲技巧&#xff08;四篇&#xff09; **篇&#xff1a;精心准备&#xff0c;奠定演讲基础 一个成功的PPT演讲&#xff0c;离不开精心的准备。首先&#xff0c;要确定演讲的主题和目标&#xff0c;确保演讲内容清…

应用实战|只需几步,即可享有外卖订餐小程序

本示例是一个简单的外卖查看店铺点菜的外卖微信小程序&#xff0c;小程序后端服务使用了MemFire Cloud&#xff0c;其中使用到的MemFire Cloud功能包括&#xff1a; 其中使用到的MemFire Cloud功能包括&#xff1a; 云数据库&#xff1a;存储外卖微信小程序所有数据表的信息。…

服务端不 listen 可以创建 tcp 连接吗

这个问题有三类答案。 上来就撸 linux kernel 源码&#xff0c;折腾半天&#xff0c;哦&#xff0c;终于在 tcp_rcv_state_process 里找到了 tcp_rcv_synsent_state_process 调用&#xff0c;后者包含&#xff1a; if (th->syn) {/* We see SYN without ACK. It is attemp…

前端JS必用工具【js-tool-big-box】,Number数值转换的方法调用学习

这一小节&#xff0c;我们针对前端工具包&#xff08;npm&#xff09;js-tool-big-box的使用做一些讲解&#xff0c;主要是针对Number数值型转换的一些方法使用。 目录 前言 1 安装和引入 2 千位逗号分割 3 判断是否大于0 4 判断是否大于0的整数 5 生成指定范围内的随机数…

leetcode 循环列表的插入(Python)

题目如果不进行思考&#xff0c;巨多坑。 首先我们需要找到列表中的最小值&#xff0c;最大值这个节点&#xff0c;因为找到后可以与我们的新元素进行比较厚插入。 找到最小值&#xff0c;最大值需要循环一遍列表&#xff0c;如果当前cur元素的值<nex元素的值&#xff0c;…

堆的应用——堆排序

堆排序 堆排序是一种基于比较的排序算法&#xff0c;它利用堆这种数据结构所设计。堆是一个近似完全二叉树的结构&#xff0c;并同时满足堆积的性质&#xff1a;即子结点的键值或索引总是小于&#xff08;或者大于&#xff09;它的父结点。 堆排序可以分为两个主要步骤&#…

smart200 做client,modbus_tcp读取modbus_slave

这里还隐藏一个重要的设置&#xff0c;就是站地址。这个在库函数里。不同plc位置会不一样&#xff0c;我这里是vb1651对应modbus的地址为255&#xff0c;这个值我们可以自己更改&#xff0c;范围为1-247. 打开modbus_slave 软件&#xff0c;

【C#】rdlc报表答应报错:未能加载文件或程序集“Microsoft.SqlServer.Types

文章目录 一、报错信息二、解决方式 一、报错信息 Microsoft.Reporting.WinForms.LocalProcessingException: An error occurred during local report processing. —> Microsoft.Reporting.DefinitionInvalidException: The definition of the report ‘’ is invalid. —&…

sql注入漏洞及其sqlmap工具的使用

一、sql注入的原理 sql注入概念&#xff1a; sql注入主要是将sql语句&#xff0c;插入到web表单提交或者输入域名或者页面请求的查询字符串&#xff0c;最 终 达到一个欺骗服务器执行sql语句的效果。 sql注入的原理&#xff1a;主要分为平台层注入和代码层注入两种原因 …

stm32的GPIO基本结构

1.带FT标号的引脚能容忍5V 2.GPIO系统架构 stm32的所有GPIO都是挂载在APB2总线上的 3.GPIO的基本结构 在上图中&#xff0c;左边就是寄存器&#xff0c;右边就是驱动器了 保护二极管的作用&#xff1a;VDD表示3.3V&#xff0c;如果输入的电压的值大于3.3V&#xff0c;那么这个…
最新文章