Elasticsearch 是一个分布式、RESTful风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 学习es的时候肯定会先去了解什么是搜索引擎** 所谓搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术。搜索引擎依托于多种技术,如网络爬虫技术、检索排序技术、网页处理技术、大数据处理技术、自然语言处理技术等,为信息检索用户提供快速、高相关性的信息服务。搜索引擎技术的核心模块一般包括爬虫、索引、检索和排序等,同时可添加其他一系列辅助模块,以为用户创造更好的网络使用环境。
搜索引擎应该具备哪些要求 结合学习es的角度来说的话
- 查询速度快
高效的压缩算法、快速的编码和解码速度 - 结果准确
BM25 、TF-IDF - 搜索结果丰富
召回率 es核心概念主要有这八个部分
面向海量数据如何达到搜索引擎级别的查询速度 这里又会想到索引 索引
- 帮助快速检索
- 以数据结构为载体
- 以文件的形式落地
而想到索引先想到的一般都是我们所熟悉的常见的数据库索引,如mysql
先从数据库的组成结构
- 客户端
常用的navicat - 服务端
连接器、分析器、优化器、执行器、缓存 -》 系统进程 - 存储引擎
myisam、innodb -》以B+树为载体,以文件形式落地
mysql的索引结构 先看B树的数据机构 而B+树就是在这上面进行优化 mysql使用的就是B+树 网上很多资料去学习这些,这里不做过多赘述
mysql索引能解决大数据检索的问题吗
- 索引往往很长,如果使用B+树,树可能很深,而io就会很大,io很大就会很慢
- 索引可能会失效
- 精准度差
而这时候,我们的前辈就开发出了强大的Lucene来解决这个问题,而现在常用的ES就是基于他研发的 Lucene简介 Lucene是apache软件基金会 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。
这其中的关键词:全文检索 索引系统通过扫描文章中的每一个词,对其创建索引,指明在文章中出现的次数和位置,当用户查询时,索引系统就是根据实现遍历的索引进行查找,并将查找的结果反馈给用户的方式
ES结构 客户端 服务端引擎(查询引擎、文本分析引擎、索引引擎) 存储引擎
主要的知识点
- 倒排索引核心原理
倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。 倒排索引的数据结构 倒排索引核心算法 倒排表的压缩算法(FOR和RBM)和词项索引的检索原理(FST) 后面的这些目前还在学习阶段,都是一些浅显的认识就不说明啦,有兴趣的可以自己去查阅资料。 - FOR压缩算法
- RBM压缩算法
- Trie(字典树/前缀树)原理
- FST构建原理
- FST在lucene中的实现原理
- .tip和.tim文件内部结构
- FST在lucene中的构建和读取过
最后可以推荐大家到es的中文社区去学习和讨论 https://elasticsearch.cn
|