title: ElasticSearch-base-倒排索引及其原理
date: 2021-10-19 16:29:51
tags: ElasticSearch
categories:
ElasticSearch
1.倒排索引及其原理 前言
我不必完美,我只需不断学习。
一、原理见其名知其意,有倒排索引,对应肯定,有正向索引。
正向索引(forward index),反向索引(inverted index)更熟悉的名字是倒排索引。
在搜索引擎中每个文件都对应一个文件ID,文件内容被表示为一系列关键词的集合(实际上在搜索引擎索引库中,关键词也已经转换为关键词ID)。例如“文档1”经过分词,提取了20个关键词,每个关键词都会记录它在文档中的出现次数和出现位置。
得到正向索引的结构如下:
“文档1”的ID > 单词1:出现次数,出现位置列表;单词2:出现次数,出现位置列表;…………。
“文档2”的ID > 此文档出现的关键词列表。
一般是通过key,去找value。
**当用户在主页上搜索关键词“华为手机”时,假设只存在正向索引(forward index),那么就需要扫描索引库中的所有文档,找出所有包含关键词“华为手机”的文档,再根据打分模型进行打分,排出名次后呈现给用户。**因为互联网上收录在搜索引擎中的文档的数目是个天文数字,这样的索引结构根本无法满足实时返回排名结果的要求。
所以,搜索引擎会将正向索引重新构建为倒排索引,即把文件ID对应到关键词的映射转换为关键词到文件ID的映射,每个关键词都对应着一系列的文件,这些文件中都出现这个关键词。
得到倒排索引的结构如下:
“关键词1”:“文档1”的ID,“文档2”的ID,…………。
“关键词2”:带有此关键词的文档ID列表。
从词的关键字,去找文档。
二、换句话说倒排索引,其实相当于将value的值拿出来分词当做key.然后查询value,这个value可能是key
2.1、索引爆炸试想一下,如果整片文章那么多词,如果每个词的索引都对应整篇文章的内容那得存多少,那么内存的消耗是很大的。这就称为索引爆炸。
但是呢我们可以将词映射到文章标题,然后在通过标题映射到文章内容。比如
索引’前‘->静夜思->窗前明月光,疑是地上霜,举头望明月,低头思故乡。这么来的话,效率就高了很多了。
2.2、索引矩阵一个词可以指向多个索引
2.3、停顿词过滤像文章中的语气词,没什么具体意思的词都称为停顿词。
停顿词就都会被过滤掉。
三、搜索引擎三大过程爬虫内容,进行分词,建立反向索引
(详细请百度)
四、Lucene简介lucene的库,用它就可以方便地建立倒排索引
(详细请百度)
五、ElasticSearch简介优点:
elasticsearch将对搜索引擎的操作封装成了restful的api,通过http请求就能对其进行操作;它还考虑了海量数据,实现了分布式,是一个可以存储海量数据的分布式搜索引擎 5.1、用法
之前我们说过,Elasticsearch 把操作都封装成了 HTTP 的 API,我们只要给 Elasticsearch 发送 HTTP 请求就行。
比如使用curl -XPUT 'ip:port/poems' ,就能建立一个名为 Poems 的索引,其他操作也是类似的。
所以,只需要学习elasticsearch的http api,就可以熟练操作elasticsearch
5.2、Elasticsearch分布式原理ES也是会对数据进行切分,同时每一个分片会保存多个副本,其原因和HDFS一样
目的:都是为了保证分布式环境下的高可用
5.2.1、ES也是master-slave框架吗?没错,在 ES中,节点是对等的,节点间会通过自己的一些规则选取集群的 Master,Master 会负责集群状态信息的改变,并同步给其他节点。
注意:只有建立索引和类型需要经过 Master,数据的写入有一个简单的 Routing 规则,可以 Route 到集群中的任意节点,所以数据写入压力是分散在整个集群的。
六、ELK系统 6.1、应用场景其实很多公司都用 Elasticsearch 搭建 ELK 系统,也就是日志分析系统。其中 E 就是 Elasticsearch,L 是 Logstash,是一个日志收集系统,K 是 Kibana,是一个数据可视化平台。
6.2、分析日志假如一个分布式系统有 1000 台机器,系统出现故障时,我要看下日志,还得一台一台登录上去查看,是不是非常麻烦?
但是如果日志接入了 ELK 系统就不一样。比如系统运行过程中,突然出现了异常,在日志中就能及时反馈,日志进入 ELK 系统中,我们直接在 Kibana 就能看到日志情况。如果再接入一些实时计算模块,还能做实时报警功能。
这都依赖于ES强大的反向索引功能,这样我们根据关键字就能查找到关键的错误日志了
七、搜索引擎原理总结:
反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。搜索引擎原理就是建立反向索引。Elasticsearch 在 Lucene 的基础上进行封装,实现了分布式搜索引擎。Elasticsearch 中的索引、类型和文档的概念比较重要,类似于 MySQL 中的数据库、表和行。Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。Elasticsearch 一个典型应用就是 ELK 日志分析系统。
开发视图用于描述系统的模块划分和组成,以及细化到内部包的组成设计,服务于开发人员,反映系统开发实施过程。
八、参考资料https://zhuanlan.zhihu.com/p/62892586 作者 channingbreeze



