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

ElasticSearch简介及常用操作指南

一. ElasticSearch简介

ElasticSearch 是一个基于 Lucene 构建的开源、分布式、RESTful 风格的搜索和分析引擎。

ElasticSearch

1. 核心功能

  • 强大的搜索能力

    • 它能够提供全文检索功能。例如,在海量的文档数据中,可以快速准确地查找到包含特定关键词的文档。这在处理诸如电商产品目录(可以按照产品名称等文本内容搜索)、新闻文章数据库(能依据标题或正文关键词检索新闻)等场景下非常有用。
    • 支持多种搜索方式,如简单搜索、短语搜索、模糊搜索等。模糊搜索可以处理用户输入的拼写错误等情况,并且还能进行通配符搜索,像在搜索框中输入 “comput*” 就可以匹配到 “computer”“computing” 等词。
  • 数据分析功能强大

    • 可以执行聚合操作,对数据进行统计分析。比如在电商销售数据中,通过聚合操作可以计算出不同产品的销售额总和、平均销售额,或者按地域统计订单数量等。这些聚合操作可以帮助企业进行商业智能分析,了解业务发展趋势和用户行为模式。
  • 高性能

    • ElasticSearch 采用倒排索引的原理,这是一种非常高效的文本检索数据结构。并且它是分布式系统,能够将数据分散存储在多个节点上,这样在搜索和分析时可以充分利用多台服务器的资源,提高查询速度。例如,在一个大型的互联网公司中,面对海量的用户日志数据,ElasticSearch 可以快速响应查询请求,几乎不影响用户体验。
  • 高扩展性和高可用性

    • 它很容易进行横向扩展,可以通过添加新的节点来增加系统的处理能力和存储容量。同时,它具有副本机制,可以确保数据的安全性和高可用性。即使某个节点出现故障,数据也不会丢失,其他节点可以继续提供服务。这对于关键业务系统,如金融交易系统中的数据存储和查询来说至关重要,能够保证业务的连续性。

2. 应用场景

  • 日志分析

    • 在企业的 IT 基础设施中,服务器、应用程序等会产生大量的日志。ElasticSearch 可以收集、存储和分析这些日志数据,帮助运维人员快速定位系统故障。例如,通过分析 Web 服务器的日志,可以找出访问量高峰时段、响应时间过长的页面等信息,从而优化服务器性能。
  • 企业搜索

    • 可以将企业的内部文档(如员工手册、项目文档等)、知识库等数据整合到 ElasticSearch 中。员工可以通过简单易用的搜索界面快速找到所需信息,提高工作效率。比如,在大型律师事务所中,律师可以利用它快速检索相关的法律案例文件。
  • 电商搜索和推荐系统

    • 对于电商平台,ElasticSearch 可以提供强大的商品搜索功能。它能够根据用户的搜索词,快速返回匹配的商品列表,并且结合用户的行为数据(如浏览历史、购买记录等)进行个性化推荐。例如,当用户搜索 “运动鞋” 时,可以准确地展示各种品牌、型号的运动鞋,并且根据用户的偏好推荐相关的篮球鞋、跑步鞋等。

二. 常用操作命令

1. 创建索引

PUT http://<主机IP地址>:9200/<索引名称>

PUT http://10.0.1.2:9200/company{"settings": {// 将主分片数量"number_of_shards": 10,// 设置副本数量"number_of_replicas": 1}
}

2. 检索索引信息

GET http://<主机IP地址>:9200/<索引名称>

3. 删除索引信息

DELETE http://<主机IP地址>:9200/<索引名称>

4. 文档操作

4.1 新增文档,并指定ID

POST http://<主机IP地址>:9200/<索引名称>/_doc/<文档ID>

POST http://10.0.1.2:9200/company/_doc/123412341415{"company_name": "百胜中国有限公司","legal_name": "张三","tags": ["供应链管理", "餐饮服务"]
}
4.2 新增文档,不指定文档ID,系统采用随机文档ID

POST http://<主机IP地址>:9200/<索引名称>/_doc

POST http://10.0.1.2:9200/company/_doc{"company_name": "百胜中国有限公司","legal_name": "张三","tags": ["供应链管理", "餐饮服务"]
}
4.3 获取指定文档信息

GET http://<主机IP地址>:9200/<索引名称>/_doc/<文档ID>

GET http://10.0.1.2:9200/company/_doc/123412341415
4.4 更新文档

PUT http://<主机IP地址>:9200/<索引名称>/_doc/<文档ID>

PUT http://10.0.1.2:9200/company/_doc/123412341415{   "doc": {"legal_name": "李四","tags": ["供应链管理", "餐饮服务", "数字供应链"]}
}
4.5 删除文档

DELETE http://<主机IP地址>:9200/<索引名称>/_doc/<文档ID>

5. 查看所有的文档列表

GET http://<主机IP地址>:9200/_cat/indices?v

GET http://10.0.1.2:9200/_cat/indices?v

6. 查询

6.1 匹配查询

GET http://<主机IP地址>:9200/<索引名称>/_search

GET http://10.0.1.2:9200/company/_search?pretty{"query": {"match": {"legal_name": "李四"}}   
}

match查询:

  1. 作用:用于在文本字段中执行全文检索,查找包含指定词语或短语的文档
  2. 使用场景:适用于执行基于文本内容的搜索,比如在公司名称、法人代表查找特定关键词。
6.2 范围查询

GET http://<主机IP地址>:9200/<索引名称>/_search

{"query": {"range": {"age": {"gte": 20,"lte": 35}}},// 设置查询返回数量size: <返回数据量>
}
  • range: 指定进行范围查询
  • age: 指定要进行查询的字段名称(属性名称)
  • gte: 表示大于等于某个值
  • lte: 表球小于等于某个值
6.3 布尔查询

GET http://<主机IP地址>:9200/<索引名称>/_search

{"query": {"bool": {"must": [{"match": {"company_name": "生物科技"  },}, {"range": {"establish_year": {"gte": 3}}}],"must_not": [{"match": {"status": "注销"}}],"should": [{"match": {"province": "广东省"}}],  "minimum_should_match": 1}},// 设置查询返回数量size: <返回数据量>
}

上述内容用于构建复杂“Elastic”查询逻辑, 包括以下几个部分:

  • must: 指定了所有这些条件必须满足的查询子句;
  • must_not: 指定了文档不能匹配的条件;
  • should: 指定了一个可选条件,如果满足则增加文档的匹配分数;
  • minimum_should_match: 指定了至少满足几个“should”查询条件,默认是0。
6.4 分页查询

GET http://<主机IP地址>:9200/<索引名称>/_search

{"query": {// 查询条件"range": {"age": {"gte": 20,"lte": 35}}},// 从第一个文档开始,类似于MySQL的offsetfrom: 0,// 设置查询返回数量size: <返回数据量>
}

使用from和size参数来实现分页:

  • from: 指定了查询结果中的偏移量,类似于MySQL的offset;
  • size: 指定了每页返回的文档数
6.5 多字段匹配查询

多字段查询可使用的匹配类型为multi_match,multi_match与match类似,不同的是它可以在多个字段中进行查询。

GET http://<主机IP地址>:9200/<索引名称>/_search

{"query": {// 查询条件"multi_search": {"query": "医疗器械","fields": ["company_name","business_scope"]}},// 从第一个文档开始,类似于MySQL的offsetfrom: 0,// 设置查询返回数量size: <返回数据量>
}
6.6 关键字精准查询

使用term(单关键字)/terms(多关键字)查询,精确的关键词匹配查询,不对查询条件进行分词。

GET http://<主机IP地址>:9200/<索引名称>/_search


1. 单关键词查询{"query": {"term": {"legal_name": "张三"}}   
}2. 多关键词查询{"query": {"terms": {"legal_name": ["张三", "李四"]}}   
}
6.7 指定字段查询

默认情况下,Elasticsearch在搜索的结果中,会将文档中保存到在source的所有字段都返回,如果只想返回某些字段,可以添加source进行过滤。

GET http://<主机IP地址>:9200/<索引名称>/_search


{"_source": ["company_name", "legal_name", "credit_code", "business_scope"],"query": {"term": {"legal_name": "张三"}}   
}
6.8 过滤字段查询

使用includes和excludes两个字段

  • includes:来指定想要显示的字段
  • excludes:来指定不想要显示的字段

GET http://<主机IP地址>:9200/<索引名称>/_search

{"_source": {"includes": ["company_name", "legal_name", "credit_code", "business_scope"],"excludes": ["create_time", "update_time"]},"query": {"term": {"legal_name": "张三"}}   
}
6.9 模糊查询

返回包含与搜索字词相似的字词的文档可以使用“fuzzy”字段。为了找到相似的术语,fuzzy查询会在指定的编辑距离内创建一组搜索词的所有可能的变体或扩展,然后查询返回每个扩展的完全匹配。

GET http://<主机IP地址>:9200/<索引名称>/_search

{"_source": {"includes": ["company_name", "legal_name", "credit_code", "business_scope"],"excludes": ["create_time", "update_time"]},"query": {"fuzzy": {// 匹配字段名称"legal_name": {"value": "张三",// 编辑距离"fuzziness": 2}}}   
}
6.9 查询并排序输出

使用sort字段对返回的结果进行排序,通过order指定排序方式,desc是降序,asc是升序。

GET http://<主机IP地址>:9200/<索引名称>/_search

{"_source": {"includes": ["company_name", "legal_name", "credit_code", "business_scope"],"excludes": ["create_time", "update_time"]},"query": {"term": {"legal_name": "张三"}},"sort": [{"company_name": {"order": "desc"}}, {"province": {"order": "asc"}}]
}

三. ElasticSearch索引内容

查看所有索引

向Elasticsearch服务器发送GET请求 http://127.0.0.1:9200/_cat/indices?v 这里请求路径中的_cat 表示查看的意思,indices 表示索引,所以整体含义就是查看当前 ES服务器中的所有索引,就像 MySQL 中的 show tables。返回数据表的含义如下表:

表头含义
health当前服务器的健康状态
status索引打开、关闭状态
index索引名称
uuid索引统一编号
pri主分片数量
rep副本数量
docs.count可用文档数量(总记录数)
docs.deleted文档删除状态(逻辑删除)
store.size主分片和副分片整体占空间大小
pri.store.size主分片占用空间大小

相关文章:

ElasticSearch简介及常用操作指南

一. ElasticSearch简介 ElasticSearch 是一个基于 Lucene 构建的开源、分布式、RESTful 风格的搜索和分析引擎。 1. 核心功能 强大的搜索能力 它能够提供全文检索功能。例如&#xff0c;在海量的文档数据中&#xff0c;可以快速准确地查找到包含特定关键词的文档。这在处理诸如…...

缓存常见问题:缓存穿透、缓存雪崩以及缓存击穿

缓存常见问题 一、缓存穿透 (Cache Penetration) 是什么 缓存穿透是指客户端持续请求一个缓存和数据库中都根本不存在的数据。这导致每次请求都会先查缓存&#xff08;未命中&#xff09;&#xff0c;然后穿透到数据库查询&#xff08;也未命中&#xff09;。如果这类请求量…...

纤维组织效应偏斜如何影响您的高速设计

随着比特率继续飙升&#xff0c;光纤编织效应 &#xff08;FWE&#xff09; 偏移&#xff0c;也称为玻璃编织偏移 &#xff08;GWS&#xff09;&#xff0c;正变得越来越成为一个问题。今天的 56GB/s 是高速路由器中最先进的&#xff0c;而 112 GB/s 指日可待。而用于个人计算机…...

【深度学习】sglang 的部署参数详解

SGLang 的部署参数详解 SGLang(Structured Generation Language)是一个高性能的大语言模型推理框架,专为结构化生成和多模态应用设计。本文将全面介绍SGLang的部署参数,帮助你充分发挥其性能潜力。 🚀 SGLang 项目概览 SGLang是由UC Berkeley开发的新一代LLM推理引擎,…...

SDL2常用函数:SDL_RendererSDL_CreateRendererSDL_RenderCopySDL_RenderPresent

SDL 渲染器系统详解 SDL_Renderer 概述 SDL_Renderer 是 SDL 2.0 引入的核心渲染抽象&#xff0c;它提供了一种高效的、硬件加速的 2D 渲染方式&#xff0c;比传统的表面(Surface)操作更加高效和灵活。 主要函数 1. SDL_CreateRenderer - 创建渲染器 SDL_Renderer* SDL_Cr…...

[git]忽略.gitignore文件

git rm --cached .gitignore 是一个 Git 命令,主要用于 从版本控制中移除已追踪的 .gitignore 文件,但保留该文件在本地工作目录中。以下是详细解析: 一、命令拆解与核心作用 语法解析 git rm:Git 的删除命令,用于从版本库(Repository)中移除文件。--cached:关键参数…...

FEMFAT许可的有效期限

在工程仿真领域&#xff0c;FEMFAT作为一款领先的疲劳分析软件&#xff0c;为用户提供了强大的功能和卓越的性能。然而&#xff0c;为了确保软件的合法使用和持续合规&#xff0c;了解FEMFAT许可的有效期限至关重要。本文将为您详细解读FEMFAT许可的有效期限&#xff0c;帮助您…...

Rust使用Cargo构建项目

文章目录 你好&#xff0c;Cargo&#xff01;验证Cargo安装使用Cargo创建项目新建项目配置文件解析默认代码结构 Cargo工作流常用命令速查表详细使用说明1. 编译项目2. 运行程序3.快速检查4. 发布版本构建 Cargo的设计哲学约定优于配置工程化优势 开发建议1. 新项目初始化​2. …...

Python训练营打卡Day39

DAY 39 图像数据与显存 知识点回顾 1.图像数据的格式&#xff1a;灰度和彩色数据 2.模型的定义 3.显存占用的4种地方 a.模型参数梯度参数 b.优化器参数 c.数据批量所占显存 d.神经元输出中间状态 4.batchisize和训练的关系 作业&#xff1a;今日代码较少&#xff0c;理解内容…...

UE5蓝图中播放背景音乐和使用代码播放声音

UE5蓝图中播放背景音乐 1.创建背景音乐Cube 2.勾选looping 循环播放背景音乐 3.在关卡蓝图中 Event BeginPlay-PlaySound2D Sound选择自己创建的Bgm_Cube 蓝图播放声音方法二&#xff1a; 使用代码播放声音方法一 .h文件中 头文件引用 #include "Kismet/GameplayS…...

AI 赋能数据可视化:漏斗图制作的创新攻略

在数据可视化的广阔天地里&#xff0c;漏斗图以其独特的形状和强大的功能&#xff0c;成为展示流程转化、分析数据变化的得力助手。传统绘制漏斗图的方式往往需要耗费大量时间和精力&#xff0c;对使用者的绘图技能和软件操作熟练度要求颇高。但随着技术的蓬勃发展&#xff0c;…...

用 Python 模拟下雨效果

用 Python 模拟下雨效果 雨天别有一番浪漫情怀&#xff1a;淅淅沥沥的雨滴、湿润的空气、朦胧的光影……在屏幕上也能感受下雨的美妙。本文将带你用一份简单的 Python 脚本&#xff0c;手把手实现「下雨效果」动画。文章深入浅出&#xff0c;零基础也能快速上手&#xff0c;完…...

C#对象集合去重的一种方式

前言 现在AI越来越强大了&#xff0c;有很多问题其实不需要在去各个网站上查了&#xff0c;直接问AI就好了&#xff0c;但是呢&#xff0c;AI给的代码可能能用&#xff0c;也可能需要调整&#xff0c;但是自己肯定是要会的&#xff0c;所以还是总结一下吧。 问题 如果有一个…...

【LangChain】

以下是关于 LangChain框架 各核心组件的详细解析&#xff0c;结合其功能定位、技术实现和实际应用场景&#xff1a; 一、LangChain Libraries&#xff08;核心库&#xff09; 功能定位 跨语言支持&#xff1a;提供Python/JS双版本API&#xff0c;统一不同语言的LLM开发生态 …...

Java 面试实录:从Spring到微服务的技术探讨

在一个明亮的会议室里&#xff0c;严肃的面试官与搞笑的程序员谢飞机正进行一场关于Java技术栈的面试。场景设定在一家知名互联网大厂&#xff0c;他们的对话充满了技术性与娱乐性。 第一轮&#xff1a;Spring框架与数据库 面试官&#xff1a;“谢飞机&#xff0c;能解释一下…...

在ROS2(humble)+Gazebo+rqt下,实时显示仿真无人机的相机图像

文章目录 前言一、版本检查检查ROS2版本 二、步骤1.下载对应版本的PX4(1)检查PX4版本(2)修改文件名(3)下载正确的PX4版本 2.下载对应版本的Gazebo(1)检查Gazebo版本(2)卸载不正确的Gazebo版本(3)下载正确的Gazebo版本 3.安装bridge包4.启动 总结 前言 在ROS2的环境下&#xff…...

github双重认证怎么做

引言 好久没登陆github了&#xff0c; 今天登陆github后&#xff0c;提醒进行2FA认证。 查看了github通知&#xff0c;自 2023 年 3 月起&#xff0c;GitHub 要求所有在 GitHub.com 上贡献代码的用户启用一种或多种形式的双重身份验证 (2FA)。 假如你也遇到这个问题&#xf…...

数据的类型——认识你的数据

第02篇&#xff1a;数据的类型——认识你的数据 写在前面&#xff1a;嗨&#xff0c;大家好&#xff01;我是蓝皮怪。在上一篇文章中&#xff0c;我们聊了统计学的基本概念&#xff0c;今天我们来深入了解一个非常重要的话题——数据的类型。你可能会想&#xff1a;"数据就…...

DeepSeek与AI提示语设计的全面指南

文章目录 什么是提示语设计&#xff1f;为什么提示语设计如此重要&#xff1f;DeepSeek提示语设计的基本原则1. 明确性是王道2. 结构化你的需求3. 提供上下文4. 指定输出格式5. 使用示例6. 设定角色 进阶技巧&#xff1a;让你的提示语更上一层楼1. 链式思考2. 反向提问3. 限定条…...

Kafka KRaft + SSL + SASL/PLAIN 部署文档

本文档介绍如何在 Windows 环境下部署 Kafka 4.x&#xff0c;使用 KRaft 模式、SSL 加密和 SASL/PLAIN 认证。stevensu1/kafka_2.13-4.0.0 1. 环境准备 JDK 17 或更高版本Kafka 4.x 版本&#xff08;本文档基于 kafka_2.13-4.0.0&#xff09; 2. 目录结构 D:\kafka_2.13-4.…...

Codeforces Round 1027 (Div. 3)

A. Square Year 题目大意&#xff1a;拆分完全平方数。 【解题】&#xff1a;如果是完全平方数输出0 平方根就行&#xff0c;不是就输出-1。 code: #include <iostream> #include <string> #include <cmath> using namespace std; typedef long long LL…...

动态内容加载时,爬虫应如何处理?

处理动态内容加载是爬虫开发中的一个常见挑战。许多现代网站使用 JavaScript 动态加载内容&#xff0c;这意味着页面的某些部分可能在初始加载时并不存在&#xff0c;而是通过后续的 AJAX 请求或 JavaScript 执行动态生成的。为了处理这种情况&#xff0c;爬虫需要能够模拟浏览…...

第五十二节:增强现实基础-简单 AR 应用实现

引言 增强现实(Augmented Reality, AR)是一种将虚拟信息叠加到真实世界的技术,广泛应用于游戏、教育、工业维护等领域。与传统虚拟现实(VR)不同,AR强调虚实结合,用户无需完全沉浸到虚拟环境中。本文将通过Python和OpenCV库,从零开始实现一个基础的AR应用:在检测到特定…...

前端高频面试题1:HTML/CSS/浏览器/计算机网络

目录 1.为什么会出现margin塌陷&#xff1f; 2.如何解决margin塌陷&#xff1f; 3.HTML5有哪些新特性&#xff1f; 4.常见的语义化标签有哪些&#xff1f;语义化标签的好处&#xff1f; 5.使用css和js做动画有何优劣 6.如何实现文本超出展示省略号 7.deep在css中存在吗&…...

LLaMaFactory 微调QwenCoder模型

步骤一&#xff1a;准备LLamaFactory环境 首先,让我们尝试使用github的方式克隆仓库: git config --global http.sslVerify false && git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git # 创建新环境&#xff0c;指定 Python 版本&#xff08;以 3.…...

Git全流程操作指南

Git全流程操作指南 一、Git 环境配置 1. 安装 Git Windows&#xff1a;下载 Git for Windows macOS&#xff1a;brew install git Linux&#xff1a; sudo apt-get update && sudo apt-get install git # Debian/Ubuntu sudo yum install git …...

【最新版】Arduino IDE的安装入门Demo

1、背景说明 1、本教程编写日期为2025-5-24 2、Arduino IDE的版本为&#xff1a;Arduino IDE 2.3.6 3、使用的Arduino为Arduino Uno 1、ArduinoIDE的安装 1、下载。网址如下&#xff1a;官网 2、然后一路安装即可。 期间会默认安装相关驱动&#xff0c;默认安装即可。 3、安…...

不起火,不爆炸,高速摄像机、数字图像相关DIC技术在动力电池新国标安全性能测试中的应用

2026年7月1日&#xff0c;我国将正式实施GB38031-2025《电动汽车用动力蓄电池安全要求》——这项被称为“史上最严电池安全令”的新国标&#xff0c;首次将“热失控不蔓延、不起火、不爆炸”从企业技术储备上升为强制性要求&#xff0c;标志着电池安全进入“零容忍”时代&#…...

thinkadmin中使用layui日期选择器,数据库存储时间戳

form.html <div class="layui-form-item label-required-prev" id="jiezhi_time-div">...

WSL中ubuntu通过Windows带代理访问github

WSL中ubuntu通过Windows带代理访问github 前言: WSL是Windows下的ubuntu访问工具&#xff0c;目前无法访问外网&#xff0c;因此需要配置一下。 步骤一 代理中进行如下设置: 步骤二 ubuntu22.04中修改配置 使用如下命令获取IP地址&#xff1a; ip route | grep default | aw…...