一、应用场景
Elasticsearch 具有广泛的应用场景,包括全文搜索、日志分析、运维监控、安全分析等。
Elasticsearch 是开源的实时分布式搜索分析引擎,内部使用 Lucene 做索引与搜索。适用场景包含信息检索、舆情分析、推荐系统、广告系统等多种对综合检索&召回有需求的场景。
二、为什么 Elasticsearch倒排索引快
正排索引是从文档到关键字的映射(已知文档求关键字);
倒排索引是从关键字到文档的映射(已知关键字求文档);
1、正向索引
正向索引(正排索引):正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。
“文档1”的ID > 关键词1:出现次数,出现位置列表;关键词2:出现次数,出现位置列表;…………。
“文档2”的ID > 此文档出现的关键词列表。
文档ID | 内容所切分出的关键词 |
---|---|
文档1 | 关键词1、关键词2、关键词5、关键词11......关键词L |
文档2 | 关键词3、关键词5、关键词7......关键词M |
文档3 | 关键词2、关键词4、关键词8......关键词N |
文档4 | 关键词61、关键词9、关键词10......关键词O |
...... | ...... |
文档n | 关键词9、关键词15、关键词21......关键词P |
优点:易于维护:新增的话直接跟在原来的后面,删除的话直接删除某一条即可
缺点:查询时间长,检索效率低下
例如:当用户搜索关键词的时候,比如用户搜索关键词5,会按照id顺序依次找到有关键词5的页面,服务器还需要对所有索引的页面进行检索,消耗的资源非常大。
如果用户搜索的是长尾词,比如说“关键词2+关键词5”,这种相关性的计算资源消耗就更大了,耗时也更长!
2、倒排索引
倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。
由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率。
倒排索引的结构如下:
“关键词1”:“文档1”的ID,“文档2”的ID,…………。
“关键词2”:带有此关键词的文档ID列表。
关键词 | 文档 |
---|---|
关键词1 | 文件1、文件2、文件5、文件11......文件L |
关键词2 | 文件3、文件5、文件7......文件M |
关键词3 | 文件2、文件4、文件8......文件N |
关键词4 | 文件61、文件9、文件10......文件O |
...... | ...... |
关键词n | 文件9、文件15、文件21......文件P |
优点:检索的快速响应是一个最为关键的性能
缺点:倒排表的建立和维护都较为复杂(索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率)
这样一来,当用户搜索关键词2+关键词5 的时候,搜索引擎只需要将包含关键词2且包含关键词5的文件调用出来,然后计算它们的相关度和权重。倒排索引的应用,大大加快了呈现排名的速度,减轻了服务器计算的压力。
倒排索引中,不仅会记录相应关键词文件的ID,还会记录关键词频次、关键词出现在文件中的位置、关键词对应的文档更新频率等信息,在排名的时候,这些信息会被进行加权处理。
标签:文件,--,......,关键词,索引,文档,Elasticsearch,ID,ES From: https://www.cnblogs.com/gdwkong/p/17331540.html