搜索引擎为什么这么快?Lucene 倒排索引介绍
Posted 大数据技术架构
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索引擎为什么这么快?Lucene 倒排索引介绍相关的知识,希望对你有一定的参考价值。
目前主流的一些全文搜索引擎,比如Elasticsearch、Solr等,都是基于开源全文搜索库Apache Lucene构建的。Lucene是一个Java编写的全文搜索引擎库,是一套专注于文本索引和搜索的工具包,能够为应用程序添加索引与搜索能力。
分布式搜索引擎比如Elasticsearch之所以搜索性能这么优秀,得益于其基于Lucene构建的数据结构 — — 倒排索引。
倒排索引(Inverted Index),也被称为反向/逆向索引,是一种索引数据结构。倒排索引建立的是词条到文档的映射关系。Lucene官方给出的定义是:
The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms.
译文(打扰了):
这种索引存储着关于词条的统计信息,以使基于词条的搜索更加高效。Lucene的索引被称为倒排索引。这是因为对于词条来说,它可以列出包含它的所有文档,这与文档列出词条的正常逻辑相反。
例如,现在我们有两条记录,都包含一个content字段,如下:
id 1 → Elasticsearch是最流行的搜索引擎
id 2 → 搜索引擎是如何诞生的
其中每一条记录在文档型搜索系统比如Elasticsearch、Solr中被称为一个文档(Document),每个Document都有一个文档 id。
现在分析文档内容得到关键词如下:
Elasticsearch是最流行的搜索引擎 → [Elasticsearch][流行][搜索引擎]
搜索引擎是如何诞生的 → [搜索引擎][如何][诞生]
分析文档内容得到关键词的过程称为分词,也称文本分析(Analysis),分析出的各个关键词称为词条(Term或Token,英文有点生硬)。
倒排索引包含两部分:
分词词典(Term Dictionary):所有分词的集合。
倒排列表(Posting List):文档id的数组,及分词在文档中的一些信息。
上面例子的倒排索引就是如下表示:
其中,第一列表示的就是Term Dictionary;其余部分属于Posting List,包含以下部分:
ID:文档id,用于获取原始信息;
单词频率(TF,Term Frequency):词条在文档中出现的次数,用于后续相关性评分的计算;
位置(Position):词条在文档中以分词为单位的位置,用于做词语搜索(Phrase Query);
偏移量(Offset):词条在文档中以字符为单位的起始和结束偏移量(BeginOffset和EndOffset),用于高亮显示。
这就是最基本的倒排索引了。这种索引结构非常适用于快速的全文搜索。
因此Elasticsearch、Solr等搜索引擎均基于这种结构实现自己的倒排索引,并做了一些索引优化,提高了搜索速度。
喜欢就点一下在看呗
以上是关于搜索引擎为什么这么快?Lucene 倒排索引介绍的主要内容,如果未能解决你的问题,请参考以下文章
es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗?...