Elasticsearch
是一个基于
Lucene
的搜索服务器。它提供了一个分布式多用户能力的
全文搜索引擎
,基于RESTful web
接口。
Elasticsearch
是用
Java
语言开发的,并作为
Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Lucene 之所以能在搜索中发挥至关重要的作用正是因为
倒排索引。
倒排索引中有两个非常重要的概念:
文档(
Document
):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商
品信息
词条(
Term
):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词
条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条
创建倒排索引
是对正向索引的一种特殊处理,流程如下:
1.将每一个文档的数据利用算法分词,得到一个个词条
2.创建表,每行数据包括词条、词条所在文档
id
、位置等信息
3.因为词条唯一性,可以给词条创建索引
倒排索引的
搜索流程
如下
:
1
)用户输入条件
"xxx
"
进行搜索。
2
)对用户输入内容
分词
,得到词条
。
3
)拿着词条在倒排索引中查找,可以得到包含词条的文档
id
:
1
、
2
、
3
。
4
)拿着文档
id
到正向索引中查找具体文档。
倒排索引的结构
根据倒排索引的概念,我们可以用一个 Map来简单描述这个结构。这个 Map 的 Key 的即是分词后的单词,这里的单词称为 Term,这一系列的 Term 组成了倒排索引的第一个部分 —— Term Dictionary (索引表,可简称为 Dictionary)。倒排索引的另一部分为 Postings List(记录表),也对应上述 Map 结构的 Value 部分集合。