ElasticSearch简介及常用操作指南

article/2025/8/25 2:46:12

一. 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主分片占用空间大小

http://www.hkcw.cn/article/kEfoZOYurS.shtml

相关文章

Transformer《Attention is all you need》

发布时间&#xff1a;2017/06/12 发布单位&#xff1a;Google、多伦多⼤学 简单摘要&#xff1a;直译为“变换器”&#xff0c;⼀种采⽤⾃注意⼒机制的深度学习模型&#xff0c;按照输⼊数据各部分重要 性不同⽽分配不同权重。⼴泛⽤于NLP和CV领域。 阅读重点&#xff1a;s…

html+css+js趣味小游戏~HexGL赛车竞速(附源码)

下面是一个简单的记忆卡片配对游戏的完整代码&#xff0c;使用HTML、CSS和JavaScript实现&#xff1a; html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wid…

VL 中间语言核心技术架构:构建全链路开发生态

一、VL 中间语言核心架构&#xff1a;全链路开发的三大关键层级 在企业级应用开发面临效率与技术深度双重挑战的背景下&#xff0c;iVX 自主研发的 VL&#xff08;Visual Language&#xff09;中间语言体系&#xff0c;通过 "可视化建模 - 语义编译 - 多端适配" 三大…

GPU 图形计算综述 (二):固定管线

在计算机图形学中&#xff0c;图形管线&#xff08;Graphics Pipeline&#xff09;是指通过一系列软硬件算法&#xff0c;将三维空间中的物体表征&#xff0c;转换为二维空间的物体表征的过程。一般通过3D网格&#xff08;Mesh&#xff09;等图元&#xff08;Primitive&#xf…

Manus数据手套:赋能人形机器人遥操作与AI数据训练的创新力量

人形机器人技术与AI技术正在进入蓬勃发展的黄金时代。特斯拉高调发布其即将推向市场的人形机器人Optimus&#xff0c;引发全球瞩目&#xff1b;与此同时&#xff0c;国内人形机器人产业也如雨后春笋般迅速崛起&#xff0c;展现出强劲的发展势头。在这一技术浪潮中&#xff0c;M…

C# 控制台程序实现定时自动退出

一、基础实现方式&#xff1a;同步阻塞等待 通过Thread.Sleep暂停主线程&#xff0c;适合简单场景&#xff08;需阻塞当前线程&#xff09;。 static void Main(string[] args) { Console.WriteLine("程序启动&#xff0c;5秒后自动退出..."); Thread.Slee…

【笔记】suna部署之获取 Firecrawl API key

#工作记录 Firecrawl 一、前期准备 在进行 Suna 部署时&#xff0c;获取 Firecrawl API key 是其中一个关键步骤。Firecrawl 是一款功能强大的工具&#xff0c;在 Suna 项目中可发挥重要作用&#xff0c;比如助力数据获取等相关任务。 二、获取步骤 &#xff08;一&#xff…

花哨桌面 V 3.0.0 (火影忍者版)

废话不多说,直接上链接,源码在之前版本的帖子里,本次主要修改了部分元素. 功能也不描述了哦 效果图

西门子PLC结构化编程_优化后的调节阀标准块

文章目录 前言一、功能概述二、程序编写1.新建数据类型“5_RegvalveType”2.新建FB块“6_Regvalve”3.SCL和LAD混合编程 总结 前言 在之前的文章中&#xff0c;分享过一个基于SCL语言实现的调节阀控制块西门子PLC常用底层逻辑块分享_调节阀&#xff0c;在实际应用过程中&#…

react-color-palette源码解析

项目中用到了react-color-palette组件&#xff0c;以前对第三方组件都是不求甚解&#xff0c;这次想了解一下其实现细节。 简介 react-color-palette 是一个用于创建颜色调色板的 React 组件。它提供了一个简单易用的接口&#xff0c;让开发者可以轻松地创建和管理颜色调色板。…

(一)视觉——工业相机(以海康威视为例)

一、工业相机介绍 工业相机是机器视觉系统中的一个关键组件&#xff0c;其最本质的功能就是将光信号转变成有序的电信号。选择合适的相机也是机器视觉系统设计中的重要环节&#xff0c;相机的选择不仅直接决定所采集到的图像分辨率、图像质量等&#xff0c;同时也与整个系统的运…

PnP(Perspective-n-Point)算法 | 用于求解已知n个3D点及其对应2D投影点的相机位姿

什么是PnP算法&#xff1f; PnP 全称是 Perspective-n-Point&#xff0c;中文叫“n点透视问题”。它的目标是&#xff1a; 已知一些空间中已知3D点的位置&#xff08;世界坐标&#xff09;和它们对应的2D图像像素坐标&#xff0c;求解摄像机的姿态&#xff08;位置和平移&…

C++核心编程_4.5 运算符重载_4.5.1 加号运算符重载

#include <iostream> #include <string> using namespace std;/* ### 4.5 运算符重载 运算符重载概念&#xff1a;对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型 *//* 4.5.1 加号运算符重载 作用&#xff1a;实现两…

文本预处理

文本预处理 1 词向量表示 1.1 word2vec之skipgram方式&#xff1a; 定义&#xff1a;给你一段文本&#xff0c;选定特定的窗口长度&#xff0c;然后利用中间词来预测上下文 实现过程&#xff1a;1、选定一个窗口长度&#xff1a;3、5、7等&#xff1b;2、指定词向量的维度&a…

C++中单例模式详解

在C中&#xff0c;单例模式 (Singleton Pattern) 确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。这在需要一个全局对象来协调整个系统行为的场景中非常有用。 为什么要有单例模式&#xff1f; 在许多项目中&#xff0c;某些类从逻辑上讲只需要一个实…

什么是单片机?

众所周知&#xff0c;人类行为受大脑调控&#xff0c;正如视觉、听觉、味觉、嗅觉、触觉及运动功能等感官与肢体活动均受其指挥&#xff1b;换言之&#xff0c;大脑作为人体的中枢神经系统&#xff0c;负责管理所有可控制的生理功能。 在电子设备领域&#xff0c;单片机…

DMBOK对比知识点整理(4)

1.常见数据质量维度 常见数据质量维度(DMBOK-P353)质量维度

Web攻防-SQL注入增删改查盲注延时布尔报错有无回显错误处理

知识点&#xff1a; 1、Web攻防-SQL注入-操作方法&增删改查 2、Web攻防-SQL注入-布尔&延时&报错&盲注 案例说明&#xff1a; 在应用中&#xff0c;存在增删改查数据的操作&#xff0c;其中SQL语句结构不一导致注入语句也要针对应用达到兼容执行&#xff0c;另…

动态规划-152.乘积最大子数组-力扣(LeetCode)

一、题目解析 根据示例nums数组中存在负数&#xff0c;下面分析时需注意 二、算法原理 1、状态表示 此时f[i]表示&#xff1a;以i位置为结尾的所有子数组中的最大乘积&#xff0c;但是由于nums中存在负数&#xff0c;所以还需要g[i]表示&#xff1a;以i位置为结尾的所有子数组…

Leetcode 159. 至多包含两个不同字符的最长子串

1.题目基本信息 1.1.题目描述 给你一个字符串 s &#xff0c;请你找出 至多 包含 两个不同字符 的最长子串&#xff0c;并返回该子串的长度。 1.2.题目地址 https://leetcode.cn/problems/longest-substring-with-at-most-two-distinct-characters/description/ 2.解题方法…