ElasticSearch基础入门和基本概念 - 详解
1. 全文检索
1.1 什么是全文检索
全文检索是一种通过对文本内容进行全面索引和搜索的技术,可以快速在大量文本数据中查找包含特定关键词或短语的文档。
查询 vs 检索:
- 查询:有明确的搜索条件边界(如年龄15~25岁,颜色=红色)
- 检索:无搜索条件边界,召回结果取决于相关性(同义词、谐音、别名等)
1.2 全文检索的原理
- 文本处理:分词、去除停用词等
- 建立索引:使用倒排索引记录单词位置、词频、权重等
- 搜索匹配:根据关键词查找匹配文档,按相关性排序
1.3 倒排索引
正排索引:文档→内容(如MySQL通过ID查找)
倒排索引:单词→文档列表(建立关键词与文章的对应关系)
2. ElasticSearch简介
2.1 ElasticSearch介绍
开源分布式搜索和数据分析引擎,基于Java开发,近乎实时搜索。
特点:
- 分布式架构,水平扩展
- 强大的全文检索功能
- 多语言支持
- 高性能,实时性
- 易用的RESTful API
2.2 应用场景
- 搜索引擎、站内搜索
- 日志管理与分析
- 大数据分析
2.3 技术选型对比
特性 | Elasticsearch | Solr | MongoDB | MySQL |
---|---|---|---|---|
DB类型 | 搜索引擎 | 搜索引擎 | 文档数据库 | 关系型数据库 |
分布式 | 原生支持 | 支持 | 原生支持 | 不支持 |
事务支持 | 不支持 | 不支持 | 多文档ACID事务 | 支持 |
擅长领域 | 海量数据全文检索 | 大数据聚合分析 | 海量数据CRUD | 强一致性事务 |
3. ElasticSearch环境搭建
3.1 安装ElasticSearch
Windows安装:
- 下载7.17.3版本
- 配置JDK环境(ES_JAVA_HOME > JAVA_HOME > ES_HOME)
- 运行elasticsearch.bat
- 验证:http://localhost:9200/
Linux安装:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.3-linux-x86_64.tar.gz
重要配置:
network.host: 0.0.0.0 # 开启远程访问
discovery.type: single-node # 单节点模式
JVM配置:
- Xms和Xmx设置成一样
- 不超过机器内存的50%
- 不要超过30GB
3.2 安装Kibana
配置kibana.yml:
server.port: 5601
server.host: "localhost"
elasticsearch.hosts: ["http://localhost:9200"]
i18n.locale: "zh-CN"
3.3 安装分词插件
在线安装:
bin/elasticsearch-plugin install analysis-icu
IK分词器:
- ik_smart:最粗粒度拆分
- ik_max_word:最细粒度拆分
4. ElasticSearch核心概念
4.1 核心组件
- 节点(Node):ES实例
- 角色(Roles):主节点、候选节点、数据节点、预处理节点
- 索引(Index):等价于MySQL中的表(7.x+)
- 文档(Document):最小数据单元(JSON格式)
4.2 文档元数据
_index
:所属索引名_id
:文档唯一id_source
:原始JSON数据_version
:版本号_seq_no
:严格递增序号_primary_term
:主分片任期
5. 索引操作
5.1 基本操作
PUT /es_db # 创建索引
GET /es_db # 查询索引
DELETE /es_db # 删除索引
HEAD /es_db # 检查存在
5.2 Settings配置
PUT /es_db
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2,
"analysis.analyzer.default.type": "ik_max_word"
}
}
5.3 Mapping映射
动态映射: ES自动推断类型
PUT /user/_doc/1
{
"name": "zhangsan",
"age": 32,
"address": "北京海淀区"
}
静态映射: 显式定义字段类型
PUT /user
{
"mappings": {
"properties": {
"name": {"type": "keyword"},
"age": {"type": "long"},
"address": {"type": "text"}
}
}
}
5.4 重要Mapping参数
index
:是否创建倒排索引dynamic
:控制动态添加字段doc_values
:优化排序聚合null_value
:为null设置默认值
6. 文档操作
6.1 CRUD操作
# 创建文档(指定ID)
PUT /es_db/_doc/1
{
"name": "张三",
"age": 25,
"address": "北京朝阳公园"
}
# 查询文档
GET /es_db/_doc/1
# 全量更新
PUT /es_db/_doc/1
{
"name": "张三",
"age": 25
}
# 部分更新
POST /es_db/_update/1
{
"doc": {"age": 28}
}
# 删除文档
DELETE /es_db/_doc/1
6.2 批量操作
POST _bulk
{"index":{"_index":"article","_id":3}}
{"title":"zhangsan","content":"zhangsan-666"}
{"index":{"_index":"article","_id":4}}
{"title":"李四","content":"李四是个厉害的厨子"}
6.3 批量读取
GET _mget
{
"docs": [
{"_index": "es_db", "_id": 1},
{"_index": "article", "_id": 4}
]
}
7. Spring Boot整合实战
7.1 依赖配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
7.2 实体类定义
@Data
@Document(indexName = "employees")
public class Employee {
@Id
private Long id;
@Field(type = FieldType.Keyword)
private String name;
private int sex;
private int age;
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String address;
private String remark;
}
7.3 Repository接口
@Repository
public interface EmployeeRepository extends ElasticsearchRepository<Employee, Long> {List<Employee> findByName(String name);}
7.4 模板操作
@Autowired
ElasticsearchRestTemplate elasticsearchRestTemplate;
// 索引操作
IndexOperations indexOperations = elasticsearchRestTemplate.indexOps(IndexCoordinates.of("employee_index"));
// 复杂查询
NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
builder.withQuery(QueryBuilders.matchQuery("address", "公园"));
builder.withPageable(PageRequest.of(0, 5));
8. 注意事项
8.1 生产环境建议
- 为ES创建专用用户(非root)
- 修改数据存储路径(避免升级误删)
- 合理配置JVM内存
- 设置适当的副本数
8.2 性能优化
- 避免动态映射生产环境
- 合理设置分片数
- 禁用不必要的字段索引
- 使用批量操作减少网络开销
8.3 版本兼容
- ES 7.x+ 移除type概念
- 注意Spring Data Elasticsearch版本对应关系
- 升级时注意API变化
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935898.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
电子合同时代来了!推荐一款人人都能用得起的电子合同系统,虽然现在电子合同平台很多,但成本都不低,现推荐一款可能是成本z低的电子合同签署系统,套餐没有有效期,并且可转让,用不完的永远不浪费
电子合同时代来了!推荐一款人人都能用得起的电子合同系统,虽然现在电子合同平台很多,但成本都不低,从3-7元每份价格不等,而且需要在有效期内消费,到期就归零了,对很多中小企业来说每年白白花费不少的成本,现推…
2025 年最新推荐!停车场系统厂商榜单重磅发布,涵盖管理 / 收费 / 无人值守 / 道闸 / 车牌识别系统优质服务商
当下城市化进程不断加速,车辆保有量逐年激增,停车场作为城市交通运转的关键环节,其智能化、高效化管理需求日益迫切。然而当前停车场系统市场鱼龙混杂,部分厂商技术实力薄弱,产品频繁出现识别故障、系统卡顿等问题…
2025 年汽车托运公司推荐排行榜,靠谱的汽车托运服务哪家好?推荐这五家汽车托运公司!优质企业深度解析,助您轻松选对汽车物流服务提供商全国门到门 / 仓储 / 跨境货运服务公司推荐
当前汽车产业飞速发展,跨区域购车、二手车流通、企业车辆调度等需求激增,汽车托运成为刚需。但行业乱象凸显,部分公司无正规资质、运输流程不规范,导致车辆损坏理赔难、运输时效拖延、隐性收费层出不穷,消费者和企…
3C电子企业柔性制造转型:如何依据MES管理系统完成快速换线与弹性生产?
3C电子企业柔性制造转型:如何依据MES管理系统完成快速换线与弹性生产?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …
实用指南:20250926的学习笔记
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
2025 最新移民机构推荐排行榜:精选国内靠谱移民服务机构,助力高效规划澳洲/美国/欧洲等国移民方案
当前全球化背景下,移民需求持续增长,但移民市场却乱象丛生,给有需求的人群带来极大困扰。众多中介资质参差不齐,部分缺乏专业认证,对各国移民政策解读偏差大,导致申请受阻甚至失败;服务不透明问题突出,隐藏费用…
2026 NOI 做题记录(六)
推荐阅读:H、K、N、PContest Link
\(\text{By DaiRuiChen007}\)A. [P13540] 羊驼的坎坷之旅 (6)
Problem Link
首先图中点数太多,只考虑所有的 \((0,y)\) 类点,把每条路径按经过 \((0,y)\) 分段。
具体来说,设 \(w…
2025 年安防系统厂商最新推荐榜:弱电 / 智能 / 周界 / 监控等全品类服务商深度测评及选择指南
随着 AI、物联网技术与安防领域的深度融合,市场对智能安防系统的需求已从单一设备采购转向全场景解决方案。当前安防市场中,既有深耕多年的资深企业,也涌现出一批技术新锐品牌,但厂商资质、技术实力与服务能力的差…
献丑贴:Task.Run中foreach优化
有一个场景:
在Task.Run中循环执行N个任务,原来的写法:var task = Task.Run(async () =>{int i = 0;foreach (var item in tables){i++;await writefileAsync(namespace1, item, showProcess);}});_ = task.Cont…
完整教程:应用部署(后端)
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
C# 定时任务 Quartz.NET 的使用
C# 定时任务 Quartz.NET 的使用一、定时任务的介绍
相信我们在生活中,大部分都会使用到定时任务去执行自定义的业务逻辑,如:每天早上8点钟发送一份汇总好的财经报告到指定人的邮箱;或者每周一5点30分钟自动执行下载…
WPF 通过RawInput获取系统全局触摸事件
WPF 通过RawInput获取系统全局触摸事件在做大屏或者平板的业务,或多或少会有监听触摸事件的需求。在WPF 上,监听自身应用的触摸事件是很简单的,可以监听 Windows的 Stylus、Touch、甚至是 Mouse的事件来实现业务逻辑…
基于高频电流探头的电磁兼容(EMI/EMC)测试与诊断技术方案
电磁兼容性(EMI/EMC)测试是确保电子设备在复杂电磁环境中可靠运行的重要环节。高频电流探头采用非侵入式测量方式,能够精准地捕捉电缆上的噪声电流,为诊断和解决电磁干扰问题提供可靠的数据支持。本文详细介绍了高…
Spring 事务、循环依赖连环问
Spring 事务
详情请查看:Spring 事务
Spring 事务实现方式有哪些?
事务就是一系列的操作原子执行。Spring事务机制主要包括声明式事务和编程式事务。编程式事务:通过编程的方式管理事务,这种方式带来了很大的灵活性…
20232327 2025-2026-1 《网络与系统攻防技术》实验一实验报告
20232327 2025-2026-1 《网络与系统攻防技术》实验一实验报告
1.实验内容
在本周的课程学习了缓冲区溢出和shellcode攻击的内容,以下是一些基本概念和解释:缓冲区:连续的一段存储空间;
缓冲区溢出攻击BOF(Buffer …
完整教程:OSPF LSA/ 路由种类
完整教程:OSPF LSA/ 路由种类2025-10-13 08:46
tlnshuju
阅读(0)
评论(0) 收藏
举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…
单挑市面上所有监控设备模拟器/可能是最好用的监控模拟器/支持onvif和28181协议/虚拟监控/桌面转监控/任意源转监控设备
一、前言说明
自从发布了这个监控设备模拟器,本意其实是卖代码,可是受欢迎程度不是程序员开发者,而是一堆非开发人员,没想到这个一个毫不起眼的需求,在外行人看来是真切实际的需求,比如一些收银台,需要把收银软…
在Java 11中,如何处理被弃用的类或接口?
在Java 11中处理被弃用的类或接口时,核心原则是使用官方推荐的替代方案,避免依赖过时API以确保代码的兼容性和可维护性。以下是具体处理方式和示例:
1. 替换内部API类(sun.* 或 com.sun.* 包下的类)
这些类属于JD…