Elasticsearch(ES)简介

  1. Elasticsearch(ES)简介
    • 定义与功能
      • Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎。它基于 Lucene 库构建,用于存储、搜索和分析大量数据。其主要功能包括全文搜索、结构化搜索、数据分析等。例如,在一个电商网站中,可以使用 ES 来搜索商品名称、描述等文本信息(全文搜索),也可以根据价格、库存等数值或类别字段进行筛选(结构化搜索),同时还能进行一些数据分析,如统计热门商品、用户搜索行为分析等。
    • 核心概念
      • 索引(Index):类似于传统数据库中的数据库概念,是文档的集合。例如,一个电商网站可能有一个名为 “products” 的索引,用于存储所有商品信息相关的文档。
      • 文档(Document):是可以被索引的基本信息单元,以 JSON 格式存储。在 “products” 索引中,每个商品的详细信息(如名称、价格、描述等)就是一个文档。
      • 类型(Type):在较新版本的 ES 中,类型的概念被弱化。它曾经用于在一个索引中区分不同类别的文档。例如,在 “products” 索引中,可以有 “electronics” 类型和 “clothes” 类型的文档,分别代表电子产品和服装产品,但现在更推荐为不同类型的文档创建不同的索引。
      • 字段(Field):文档由多个字段组成,每个字段存储文档的一个属性。如商品文档中的 “name”、“price” 等就是字段。
  2. ES 的使用
    • 安装与配置
      • 下载与安装:可以从 Elasticsearch 官方网站下载适合操作系统的安装包。安装完成后,通过命令行启动 ES 服务。例如,在 Linux 系统中,进入 ES 安装目录的bin文件夹,执行./elasticsearch命令来启动服务。
      • 配置文件修改:ES 的配置文件(elasticsearch.yml)可以用于修改一些重要的配置参数,如集群名称、节点名称、监听地址等。例如,可以修改cluster.name参数来设置集群名称,不同的 ES 节点只有在集群名称相同的情况下才能组成一个集群。
    • 数据操作
      • 索引创建:通过 RESTful API 或相关的客户端库(如 Java High - Level REST Client)来创建索引。例如,使用curl -X PUT "http://localhost:9200/my_index"命令可以创建一个名为 “my_index” 的索引。
      • 文档插入:向索引中插入文档,格式为 JSON。例如,使用curl -X POST "http://localhost:9200/my_index/_doc" -H 'Content - Type: application/json' -d '{"name": "product1", "price": 10.0}'可以向 “my_index” 索引中插入一个包含 “name” 和 “price” 字段的文档。
      • 查询操作
        • 简单查询:可以进行简单的匹配查询,如查询 “my_index” 索引中 “name” 字段包含 “product” 的文档。使用curl -X GET "http://localhost:9200/my_index/_search?q=name:product"命令。
        • 复杂查询(DSL - Query Domain Specific Language):使用 DSL 可以构建更复杂的查询。例如,查询价格大于 10 且小于 20 的商品文档,使用以下 JSON 格式的查询:
          {"query": {"range": {"price": {"gt": 10,"lt": 20}}}
          }

          通过curl -X GET "http://localhost:9200/my_index/_search" -H 'Content - Type: application/json' -d '上述JSON查询内容'来执行查询。

        • 数据更新与删除
          • 更新:可以部分更新文档的字段。例如,使用curl -X POST "http://localhost:9200/my_index/_update/文档ID" -H 'Content - Type: application/json' -d '{"doc": {"price": 15.0}}来更新指定文档的价格字段。
          • 删除:删除索引或文档。使用curl -X DELETE "http://localhost:9200/my_index/_doc/文档ID"可以删除指定文档,使用curl -X DELETE "http://localhost:9200/my_index"可以删除整个索引。
    • ES 源码分析(以简单的角度)
      • 启动流程分析
        • 在 ES 启动时,org.elasticsearch.bootstrap.Elasticsearch类是入口点。它会加载配置文件,解析命令行参数,然后启动节点。主要的步骤包括初始化安全模块、插件服务、节点环境等。例如,在Node类的构造函数中,会创建各种服务(如索引服务、集群服务等),这些服务的创建涉及到一系列的初始化操作,如加载索引元数据、建立集群通信等。
      • 索引操作源码分析
        • 索引创建:在org.elasticsearch.indices.IndicesService类中,createIndex方法负责创建索引。它会进行一系列的验证和初始化操作,包括检查索引名称的合法性、创建索引的元数据(如映射信息)等。在创建过程中,会涉及到与存储模块(如磁盘存储)的交互,将索引的元数据持久化到磁盘上。
        • 文档插入:文档插入操作主要涉及到org.elasticsearch.action.index.IndexRequestorg.elasticsearch.action.index.IndexResponse类。当执行文档插入请求时,请求会经过一系列的处理器,如TransportIndexAction类会处理索引操作在节点间的传输。在存储层,文档会被写入到 Lucene 索引中,这个过程涉及到对文档进行分词(如果是文本字段)、构建倒排索引等操作,这些操作主要在 Lucene 的相关类中实现,ES 通过封装 Lucene 来提供更高级的功能。
      • 查询操作源码分析
        • 简单查询:对于简单查询(如通过q参数的查询),org.elasticsearch.rest.action.search.RestSearchAction类会解析查询参数,然后构建一个基本的查询请求。这个请求会被传递到查询执行引擎,在引擎内部,会根据查询类型(如全文查询或结构化查询)进行不同的处理。
        • 复杂查询(DSL):当使用 DSL 进行查询时,org.elasticsearch.search.SearchRequestorg.elasticsearch.search.SearchResponse类参与其中。SearchRequest用于构建复杂的查询请求,它包含了查询条件、排序方式、分页信息等。在查询执行过程中,会根据请求中的查询条件(如range查询中的范围条件),通过解析器将其转换为 Lucene 能够理解的查询形式,然后在索引中进行查找。在结果返回阶段,会对查询结果进行封装和处理,如根据排序和分页要求返回相应的结果集。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重新认识HTTPS

一. 什么是 HTTPS HTTP 由于是明文传输,所谓的明文,就是说客户端与服务端通信的信息都是肉眼可见的,随意使用一个抓包工具都可以截获通信的内容。 所以安全上存在以下三个风险: 窃听风险,比如通信链路上可以获取通信…

pycharm快速更换虚拟环境

目录 1. 选择Conda 虚拟环境2. 创建环境3. 直接选择现有虚拟环境 1. 选择Conda 虚拟环境 2. 创建环境 3. 直接选择现有虚拟环境

AI生活之我用AI处理Excel表格

AI生活之我用AI处理Excel表格 场景再现AI提问词AI代码运行调试结果心得感受 场景再现 因学习需要,整理了某个题库,方便自己刷题使用。 已将每套题打上了制定标签,得到一个Excel表格。截图如下: 需求是:一共35套题&…

Cesium加载大量点数据卡顿处理办法

1.使用entity绘制随机点 // 随机生成 1000 个点 const numPoints 1000;for (let i 0; i < numPoints; i) {const lon Math.random() * 360 - 180;const lat Math.random() * 180 - 90;const height 50000 Math.random() * 5000;// 将点添加到 Cesium Viewer 中viewer…

SCUI Admin + Laravel 整合

基于 Vue3 和 Element Plus 和 Laravel 整合开发 项目地址&#xff1a;持续更新 LaravelVueProject: laravel vue3 scui

DAY6 线程

作业1&#xff1a; 多线程实现文件拷贝&#xff0c;线程1拷贝一半&#xff0c;线程2拷贝另一半&#xff0c;主线程回收子线程资源。 代码&#xff1a; #include <myhead.h> sem_t sem1; void *copy1()//子线程1函数 拷贝前一半内容 {int fd1open("./1.txt",O…

Docker入门系列——Docker-Compose

Docker Compose 是 Docker 官方编排工具&#xff0c;用于定义和运行多容器 Docker 应用程序。它是一个轻量级的工具&#xff0c;用于快速配置和启动应用程序的不同服务。 Docker Compose 是什么 Docker Compose 最初是由 Docker 公司开发&#xff0c;并于 2014 年 6 月首次发布…

实战指南:理解 ThreadLocal 原理并用于Java 多线程上下文管理

目录 一、ThreadLocal基本知识回顾分析 &#xff08;一&#xff09;ThreadLocal原理 &#xff08;二&#xff09;既然ThreadLocalMap的key是弱引用&#xff0c;GC之后key是否为null&#xff1f; &#xff08;三&#xff09;ThreadLocal中的内存泄漏问题及JDK处理方法 &…

Java基础-组件及事件处理(下)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 面板组件 说明 常见组件 JScrollPane常用构造方法 JScrollPane设置面板滚动策略的方法 JScrollPane滚…

HarmonyOS ArkTS 下拉列表组件

Entry Component struct Index {defaultValue: string 下拉列表;// 定义选项数组&#xff0c;包含 value 和可选的 labeloptions: Array<SelectOption> [{ value: aaa },{ value: bbb },{ value: ccc },{ value: ddd },{ value: eee },{ value: fff },{ value: ggg },{…

第8章 利用CSS制作导航菜单

8.1 水平顶部导航栏 水平莱单导航栏是网站设计中应用范围最广的导航设计&#xff0c;一般放置在页面的顶部。水平 导航适用性强&#xff0c;几乎所有类型的网站都可以使用&#xff0c;设计难度较低。 如果导航过于普通&#xff0c;无法容纳复杂的信息结构&#xff0c;就需要在…

使用VSCode远程连接服务器并解决Neo4j无法登陆问题

摘要&#xff1a;本文介绍了如何通过VSCode连接内网部署的Neo4j服务器&#xff0c;并启动服务。在访问Neo4j登录界面时&#xff0c;遇到了端口映射问题导致无法登录。通过手动添加7687端口的映射后&#xff0c;成功登录Neo4j。 我在内网部署了一台服务器&#xff0c;并在其上运…

Linux手动安装nginx

本次以安装nginx-1.12.2为例 1、首先说明一下,安装nginx之前需要安装如下素材: 2、开始安装 第一步,安装依赖yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel第二步,下载并安装nginx安装包(nginx官网:http://nginx.org/)# 下载 wget http://nginx…

Flink CDC(SQL Client)连接 MySQL 数据库教程

Flink CDC&#xff08;SQL Client&#xff09;连接 MySQL 数据库教程 这篇文章将指导如何使用 Flink CDC 连接到 MySQL 数据库&#xff0c;并捕获数据变更。我们将逐步完成以下操作&#xff1a; 1. 检查 Binlog 是否启用 首先&#xff0c;您需要确保 MySQL 的 Binlog 功能已…

蓝凌OA-EKP hrStaffWebService 任意文件读取漏洞

0x01 产品描述&#xff1a; ‌ 蓝凌OA-EKP‌是由深圳市蓝凌软件股份有限公司自主研发的一款数字化办公系统&#xff0c;主要适用于大中型企业在线化办公。它集成了流程管理、知识管理、会议管理、公文管理、合同管理、费用管控等多个模块&#xff0c;旨在帮助企业解决基础…

管家婆财贸ERP BB059.银行流水导入对账

最低适用版本: C系列 22.8 插件简要功能说明: 系统支持按固定模板导入银行流水明细银行流水支持销售单、销售退货单快捷对账,按单生成收款单银行流水支持生成其他付款业务单据更多细节描述见下方详细文档插件操作视频: 进销存类定制插件--银行流水导入对账 插件详细功能文…

第8章利用CSS制作导航菜单

8.1 水平顶部导航栏 8.1.1 简单水平导航栏的设计与实现 <nav>标签是HTML5新增的文档结构标签&#xff0c;用于标即导航栏&#xff0c;以便后续与网站的其他其内容整合&#xff0c;使用常用<nav>标签在页面上创建导航栏菜单区域。 8.1.1.1导航栏的创建 <!DOC…

给查询业务添加redis缓存和缓存更新策略

目录 一、添加redis缓存的主要逻辑 二、代码 三、结果 四、缓存更新策略 五、代码 一、添加redis缓存的主要逻辑 在未添加缓存时&#xff0c;前端向后端发起查询请求时&#xff0c;后端收到请求就直接查数据库&#xff0c;它的速度如下&#xff1a; 其实速度也不慢&#…

【贪心算法】No.1---贪心算法(1)

文章目录 前言一、贪心算法&#xff1a;二、贪心算法示例&#xff1a;1.1 柠檬⽔找零1.2 将数组和减半的最少操作次数1.3 最⼤数1.4 摆动序列1.5 最⻓递增⼦序列1.6 递增的三元⼦序列 前言 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到…

无人机动力测试台如何快速外接第三方传感器

前言 动力测试台对于测试动力系统的拉力、扭矩、RPM 和效率至关重要。将传感器集成到您的测试中增加了另一层优化&#xff0c;可以将您的性能提升到一个新的水平。 在无人驾驶行业中&#xff0c;有充分的证据表明&#xff0c;从外部传感器收集数据可能具有挑战性。为了解决这…