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.xdnf.cn/news/12730.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】Linux环境基础开发工具使用(下)

【Linux】Linux环境基础开发工具使用(下) 🥕个人主页:开敲🍉 🔥所属专栏:Linux🍊 🌼文章目录🌼 4. Linux编辑器--gcc /g的使用 4.1 背景知识 4.2 gcc如何完成 4.2.1 预处理 4.2.2 编…

GPU性能测试,环境搭建笔记,transformers/huggingface_hub改国内源,BertLayer import 报错

代码,以及测试方案使用的是沐神的代码 github的代码: 1. 环境搭建 首先是安装torch 这是我的pytorch版本 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124使用pip指令安装transformers transformers…

PR剪辑视频去重消重色彩叠加特效模板

采用现代设计,灵感来自鲜艳的色彩和动态的灯光效果。包含颜色控制选项,能够轻松地调整效果以匹配您的视频风格。具有图像和视频替换功能。 易用性:适合所有经验水平的用户,包括初学者。 调色板自定义:完全控制颜色以匹…

采购管理软件选择攻略:别忽视这些注意事项

企业在选择采购管理软件时必须谨慎,因为这直接关系到简化采购流程、成本控制、风险降低和效率提升等多个方面。面对内众多的软件选项和竞争目标,采购团队可能难以做出正确的选择。别担心,本文将提供一些建议和注意事项。 采购管理软件的重要性…

关于 npm 更新镜像源问题

npm(Node Package Manager),是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。) 查看当前npm版本 npm -v 10.9.0 执行以下命令报错 npm install --registryhttp…

【OceanBase 诊断调优】—— OceanBase 数据库统计信息被禁用,状态为 broken 的原因和解决方法

问题现象 因为人为因素导致部分统计信息函数未安装,自动统计信息触发执行长期失败。重新安装统计信息相关函数后,发现仍然无法正常自动统计信息收集,统计信息状态为 broken。 问题原因 统计信息 JOB 收集失败次数达到 16 次会直接禁用 JOB …

2024腾讯云双十一必抢清单:省钱、省心、省力的购买攻略

一、前言 大家好,我是 Neo!一年一度的双十一购物狂欢节又到了!在这个特别的日子,腾讯云也推出了超值的优惠活动。最近我正好在做自己的小程序项目,需要用到服务器,特意关注了这次活动,看看有没…

业财税深度融合,金鹰国际集团以数字化打造硬实力

数字经济时代,企业数字化转型已成必然,越来越多的企业踏浪前行,加速探索全领域的数字化转型,获得竞争优势。数字化技术的快速发展也加速了税收征管改革进程,财务数字化成为企业转型升级的有力抓手,助力优化…

Spring Boot 多环境开发配置详解:Profiles 的使用指南

目录 前言1. Profiles 简介1.1 什么是 Profiles?1.2 Profiles 的应用场景 2. 单文件配置方式2.1 使用三横杠 --- 分隔配置2.2 指定哪个环境的配置生效 3. 多文件配置方式3.1 配置文件的创建与命名3.2 多文件配置的优点 4. Profiles 分组管理4.1 Profile 分组的配置4…

emp.dll文件丢失的几种方法-常见问题

emp.dll文件在Windows系统中扮演着重要的角色,其作用不仅限于单一的应用程序或游戏。以下是emp.dll在系统中的几种作用: 图形渲染与游戏支持:emp.dll可能集成了高效的渲染引擎,支持复杂的3D图形和动画,为玩家提供沉浸…

永久免费!星火大模型接口源码分享(支持上下文、连续对话和历史对话保存)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 星火大模型 📒🌟 接口功能📜 源码分享🎯 使用方法⚓️ 相关链接 ⚓️📖 介绍 📖 你是否在寻找一款国产的、永久免费的大模型接口?想要在自己的项目中轻松集成强大的自然语言处理能力?今天,将为你分享一份免费的星…

小型内衣洗衣机哪个牌子好?五大超值优等品速来围观!

小型洗衣机的存在无疑是懒人的福音,它帮助了许多忙碌的人们解决了洗衣烦恼。尤其对于年龄较小的婴幼儿需要勤换衣、洗衣的时候,它的功能就显得尤为重要了,同时还能够用于清洗大人的内衣裤、袜子这一系列的贴身衣物。小型洗衣机通常用于宿舍、…

取代产品岗,又一新兴岗位在崛起!这才是产品经理未来5年最好的就业方向!

这是我入行产品经理的第1007天: 每天都是整理需求、开会、写文档、协调资源 被开发、运营diss一通,顺便为产品“背个锅” 熬夜加班做出来的产品,业务团队还是不愿意用…… 更让人头秃的是,干了3年,好像到了“职…

打造自己的RAG解析大模型:(可商用)智能文档服务上线部署

通用版面分析介绍 版面解析是一种将文档图像转化为机器可读数据格式的技术,广泛应用于文档管理和信息提取等领域。通过结合OCR、图像处理和机器学习,版面解析能够识别文档中的文本块、图片、表格等版面元素,最终生成结构化数据,大…

Spring

1、Spring框架中单例bean是线程安全的吗? 不是线程安全的。当多用户同时请求一个服务时,容器会给每个请求分配一个线程,这些线程会并发执行业务逻辑。如果处理逻辑中包含对单例状态的修改,比如修改单例的成员属性,就必…

MathGPT的原理介绍,在中小学数学教学的应用场景,以及代码样例实现

大家好,我是微学AI,今天给大家介绍一下MathGPT的原理介绍,在中小学数学教学的应用场景,以及代码样例实现。MathGPT的核心架构是一个精心设计的多层次系统,旨在有效处理复杂的数学问题。其主要组成部分包括 数学知识图谱…

【Linux】man 手册的使用指南

man 手册的使用指南 man手册中文版上传至资源(用心整理,感谢理解!) man手册官方下载链接:https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/ man 手册页:https://linux.die.net/man/ Linux man…

机器学习分析scRNA-seq解析急性髓系白血病中的疾病和免疫过程

急性髓性白血病(AML,Acute myeloid leukemia)是一种存在于复杂微环境中的疾病。作者基于scRNA-seq分析了来自40例骨髓抽吸donor的38,410个细胞,包括16例AML患者和5例健康donor。然后,应用机器学习分类器来区分恶性细胞…

【缓存策略】你知道 Write Back(回写)这个缓存策略吗?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

1小时构建Vue3知识体系-Vue的响应式,让数据动起来

本文转载自:https://fangcaicoding.cn/course/12/62 大家好!我是方才,目前是8人后端研发团队的负责人,拥有6年后端经验&3年团队管理经验。 系统学习践行者!近期在系统化输出前端入门相关技术文章,期望能…