当前位置: 首页 > ai >正文

# 05_Elastic Stack 从入门到实践(五)

05_Elastic Stack 从入门到实践(五)

一、Elasticsearch集群之分布式文档(文档的写操作、搜索操作)

1、文档的写操作

1)新建、索引和删除请求都是写(write)操作,它们必须在主分片上成功完成才能复制到相关的复制分片上。

在这里插入图片描述

2)下面我们罗列在主分片和复制分片上成功新建、索引或删除一个文档必要的顺序步骤:

– 客户端给 Node 1发送新建、索引或删除请求。
– 节点使用文档的_id确定文档属于分片0。它转发请求到Node3,分片0位于这个节点上。
– Node 3在主分片上执行请求,如果成功,它转发请求到相应的位于Node 1和Node2的复制节点上。当所有的复制节点报告成功,Node3报告成功到请求的节点,请求的节点再报告给客户端。

2、搜索文档(单个文档)

1)文档能够从主分片或任意一个复制分片被检索。

在这里插入图片描述

2)下面我们罗列在主分片或复制分片上检索一个文档必要的顺序步骤:

— 客户端给 Node 1发送get请求。
— 节点使用文档的_id确定文档属于分片0。分片0对应的复制分片在三个节点上都有。此时,它转发请求到Node 2.
— Node2返回文档(document)给Node1然后返回给客户端。

3)对于读请求,为了平衡负载,请求节点会为每个请求选择不同的分片–它会循环所有分片副本。

4)可能的情况是,一个被索引的文档已经存在于主分片上却还没来得及同步到复制分片上。这时复制分片会报告文档未找到,主分片会成功返回文档。一旦索引请求成功返回给用户,文档则在主分片和复制分片都是可用的。

二、Elasticsearch集群之分布式文档(全文搜索)

1、elasticsearch全文搜索

1)对于全文搜索而言,文档可能分散在各个节点上,那么在分布式的情况下,如何搜索文档呢?

2)elasticsearch全文搜索搜索分为2个阶段,搜索(query)+取回(fetch)。

在这里插入图片描述

2、搜索(query)查询阶段包含以下三步:

1)客户端发送一个search(搜索)请求给Node 3, Node3创建了一个长度为from+size的空优先级队

2)Node 3 转发这个搜索请求到索引中每个分片的原本或副本。每个分片在本地执行这个查询并且结果将结果到
一个大小为 from+size的有序本地优先队列里去。

3)每个分片返回document的ID和它优先队列里的所有document的排序值给协调节点Node 3。Node3把这些值合并到自己的优先队列里产生全局排序结果。

3、取回(fetch)

在这里插入图片描述

4、取回(fetch)分发阶段由以下步骤构成:

1)协调节点辨别出哪个document需要取回,并且向相关分片发出GET请求。

2)每个分片加载documlenit并且根据需要丰富(enrich)它们,然后再将document返回协调节点。

3)一旦所有的document都被取回,协调节点会将结果返回给客户端。

三、Elasticsearch的Java客户端之介绍以及构造数据

1、Elasticsearch的Java客户端

在Elasticsearch中,为java提供了2种客户端,一种是RIEST风格的客户端,另一种是Java API的客户端。

https://www.elastic.co/guide/en/elasticsearch/client/index.html

2、REST 客户端

Elasticsearch 提供了2种REST客户端:一种是低级客户端,一种是高级客户端。

1)Java Low Level REST Client:

官方提供的低级客户端。该客户端通过http来连接Elasticsearch集群。用户在使用该客户端时需要将请求数据手动拼接成Elasticsearch所需JSON格式进行发送,收到响应时同样也需要将返回的JSON数据手动封装成对象。虽然麻烦,不过该客户端兼容所有的Elasticsearch版本。

2)Java High LevelREST Client:

官方提供的高级客户端。该客户端基于低级客户端实现,它提供了很多便捷的
API来解决低级客户端需要手动转换数据格式的问题。

3、Elasticsearch 构造数据 实操 示例

1)打开谷歌浏览器(安装有es-head插件),连接elasticsearch服务器。并创建索引 haoke。分片数为5,副本数为1。

在这里插入图片描述

2)打开 Postman 软件,选择POST请求,

3)地址栏输入:如:http://192.168.196.119:9200/haoke/house/_bulk

4)请求体为 JSON 数据类型,请求内容为以下(注意最后有一空行):

#POST http://192.168.196.119:9200/haoke/house/_bulk{"index":{"_index":"haoke","_type":"house"}}
{"id":"1001","title":"整租 · 南丹大楼1居室7500","price":"7500"}
{"index":{"_index":"haoke","_type":"house"}}
{"id":"1002","title":"陆家嘴板块,精装设计一室一厅,可拎包入住诚意租。","price":"8500"}
{"index":{"_index":"haoke","_type":"house"}}
{"id":"1003","title":"整租·健安坊 1居室4050","price":"7500"}
{"index":{"_index":"haoke","_type":"house"}}
{"id":"1004","title":"整租·中凯城市之光+视野开阔+景色秀丽+拎包入住","price":"6500"}
{"index":{"_index":"haoke","_type":"house"}}
{"id":"1005","title":"整租 · 南京西路品质小区21213三轨交汇 配套齐*拎包入住","price":"6000"}
{"index":{"_index":"haoke","_type":"house"}}
{"id":"1006","title":"祥康里 简约风格*南户型 拎包入住 看房随时","price":"7000"}

5)响应数据如下:

{"took": 3271,"errors": false,"items": [{"index": {"_index": "haoke","_type": "house","_id": "2PX_PpYBbZPp9TaeL7Eq","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 0,"_primary_term": 1,"status": 201}},{"index": {"_index": "haoke","_type": "house","_id": "2fX_PpYBbZPp9TaeL7Eq","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 0,"_primary_term": 1,"status": 201}},{"index": {"_index": "haoke","_type": "house","_id": "2vX_PpYBbZPp9TaeL7Er","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 0,"_primary_term": 1,"status": 201}},{"index": {"_index": "haoke","_type": "house","_id": "2_X_PpYBbZPp9TaeL7Er","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 0,"_primary_term": 1,"status": 201}},{"index": {"_index": "haoke","_type": "house","_id": "3PX_PpYBbZPp9TaeL7Er","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 1,"_primary_term": 1,"status": 201}},{"index": {"_index": "haoke","_type"
http://www.xdnf.cn/news/807.html

相关文章:

  • Kafka 在小流量和大流量场景下的顺序消费问题
  • Spring MVC DispatcherServlet 的作用是什么? 它在整个请求处理流程中扮演了什么角色?为什么它是核心?
  • 平板电脑做欧盟网络安全法案(EU)2022/30
  • 人工智能100问☞第9问:什么是AI芯片?
  • 形象理解华为云物联网iotDA开发流程
  • MYSQL之慢查询分析(Analysis of Slow MySQL Query)
  • PyCharm 初级教程:从安装到第一个 Python 项目
  • 基于ueditor编辑器的功能开发之重写ueditor的查找和替换功能,支持滚动定位
  • 链式栈和线性栈
  • WebForms Validation
  • Spark SQL核心解析:大数据时代的结构化处理利器
  • 【基于WSAAsyncSelec模型的通信程序设计】
  • 云原生与AI的关系是怎么样的?
  • Jinja2 内置变量和函数详解
  • VScode-py环境
  • 【JS】计算任意字符串的像素宽度(px)
  • VR、AR、互动科技:武汉数字展馆制作引领未来展览新体验
  • 单例模式(线程安全)
  • Docker Compose 使用实例
  • 【漫话机器学习系列】214.停用词(Stop Words)
  • 查看MAC 地址以及简单了解
  • CHAPTER 11 A Pythonic Object
  • 定期检查滚珠丝杆的频率是多久?
  • Rust: 从内存地址信息看内存布局
  • OpenCV 图形API(44)颜色空间转换-----将图像从 BGR 色彩空间转换为 RGB 色彩空间函数BGR2RGB()
  • XMC4800 芯片深度解读:架构、特性、应用与开发指南
  • OpenCV中的图像旋转方法详解
  • 特征选择与类不平衡处理
  • aws服务--S3介绍使用代码集成
  • Missashe考研日记-day23