【Elasticsearch 技术分享】—— Elasticsearch ?倒排索引?这都是什么?
发布日期:2021-05-19 03:30:31 浏览次数:17 分类:博客文章

本文共 1419 字,大约阅读时间需要 4 分钟。

前言

革命同志是块砖,哪里需要哪里搬!这不,老大发话,要我在组内做一个 Elasticsearch 技术分享。这不话题一转,开始看起来 ES 了。虽然很久之前用过 ELK 做过日志监控系统,但是毕竟时隔已久,还是得从头看起。当然手头的活也不能停,话不多说,开始分享。先看看什么是 ES?

什么是ES

Elasticsearch 是分布式搜索和分析引擎。

Elasticsearch 为所有类型的数据提供近实时(near real-time)的搜索和分析。

常用场景:

  1. 网站搜索
  2. ELK 日志采集,存储,分析
  3. 地理信息系统分析

像下图中使用的设计:

特点:

  1. ES是一个分布式文档存储,存储的数据都是序列化为 JSON documents 。
  2. 使用倒排索引存储数据,倒排索引比较适合全文本搜索。
  3. 基于Apache Lucene搜索引擎库,可以存储,检索文档及元数据。
  4. 支持 JSON 样式的查询语言——Query DSL,也支持 SQL 样式的查询。
  5. 集群部署,易于扩展。节点(node)分片(shard),将新的 node 添加到集群时,ES 会自动迁移 shard 到新 node 上,重新平衡集群。
    1. shard 分为两种 主分片(primary shard)和 副本分片 (replica shard)
    2. replica shard 存放的是 primary shard 的冗余副本 —— 可以防止集群故障,数据丢失,同时可以提高搜索或检索速度。
    3. 在创建索引时 primary shard 数量是固定的,而replica shard 数量是可以更改的。
    4. 分片由索引配置,分片越多,维护索引则开销则越大,分片大小越大,则 ES 在增减节点重新平衡集群时,分片移动时间越长。
  6. 集群恢复: 跨集群复制 (CCR),可以自动将索引从主集群同步到热备份的辅助远程集群。

什么是倒排索引?

倒排索引也可以成为反向索引。

作为开发咱们经常接触到的就是 MySql,假设有一堆技术书籍,并且已经编上号。

  1. Java 并发编程之美
  2. Java 开发手册
  3. 深入分布式缓存
  4. Java 并发程序设计
  5. 算法
  6. 数据结构与算法
  • 如果放在 MySql 里面就是这样
id book_name
1 Java 并发编程之美
2 Java 开发手册
3 深入分布式缓存
4 Java 并发程序设计
5 算法
6 数据结构与算法

此时我想查询所有关于 并发 的书籍。

select * from table_book where book_name like %并发%;

然后会开始遍历表格,查找到 1和4两条记录。

  • 如果是倒排索引处理的话

首先会将每个名称进行分词,比如 Java 并发编程之美 会被分为 Java 并发 编程

分词结束之后按照词关联书籍的编号。

term ids
Java 1、2、4
并发 1、4
编程 1
算法 5、6
分布式 3
... ...

在倒排索引中搜索并发,然后进行检索,就很容易定位到关于并发书籍的编号。

那什么是 Lucene?

Lucene 可以理解为一个开源的、高性能、可伸缩的信息搜索库。使用 Java 开发,封装了各种倒排索引和搜索的API。相当于一个组件。

而 ES 就是在 Lucene 之上进行的开发,从而可以高可用集群部署故障迁移备份容灾等。

总结

就这么多,先知道个 ES 是干嘛的。后续再慢慢看、慢慢总结。

上一篇:【Elasticsearch 技术分享】—— ES 常用名词及结构
下一篇:给大家介绍下,这是我的流程图软件 —— draw.io

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月27日 16时30分13秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

html游戏玩不了,WinXP网页游戏玩不了怎么办有哪些解决方法 2023-01-24
html转jsp_JSP详解 2023-01-24
ICLOUD储存空间要升级吗_有人像我一样需要恢复苹果手机icloud空间ios备份时 微信卡住不动了吗(已解决)... 2023-01-24
image unity 原始尺寸_Unity基础教程-对象管理(十一)——生命周期(Growth and Death)... 2023-01-24
iphone打字怎么换行_手持iPhone?你可能并不知道的小技巧! 2023-01-24
jaccard相似度_自然语言处理之文本相似度计算 2023-01-24
java 8 list对象属性判空_java ---- 认识类对象,属性和方法 2023-01-24
java http delete_java积累---HttpDelete请求方式传递参数 2023-01-24
java swing数据库,如何在Java swing中查看数据库结果集 2023-01-24
java xmpp 群聊,使用XMPPFramework openfire创建聊天室 2023-01-24
java 反义_java中一些常用的英语 2023-01-24
java 命令行 class_如何从命令行执行java .class 2023-01-24
java 字符编码过滤器_java web中字符编码的过滤器(Filter - 1) 2023-01-24
java 线程 栈_Java线程堆栈分析 2023-01-24
#pragma data_seg() 共享数据// MyData段 // 进程 // DLL 2023-01-24
#NOIP前数学知识总结 2023-01-24
java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单! 2023-01-24
java序列化_java对象的序列化和反序列化 2023-01-24
java开发区块链_用Java代码实现区块链 2023-01-24
java快捷键eclipse_eclipse的设置和一些快捷键 2023-01-24