Elasticsearch索引文档过程

216 阅读2分钟

这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战

前言

Elasticsearch是目前主流的搜索引擎,那么当我们把数据插入进Elasticsearch中,会发生什么呢?那么我们就来探究一下。

新建文档

让我们在Ealsticsearch中插入一个文档,就像以下curl语句:

curl -XPUT localhost:9200/testindex0201/testtype/1 -d ‘{
“name”: “Arun Mohan”,
“age”: 31
}’

所以我们很快就在Elasticsearch中对文档进行了索引,在这个简单的过程中,有很多相关的问题:

  1. Elasticsearch是按原样存储数据还是在索引过程中对其进行修改?
  2. 在 Elasticsearch 中如何更快地搜索文档?

以下章节就来回答这些相关问题:

数据索引过程

下图展示了Elasticsearch索引文档的一个高级抽象的过程

image.png

文档在Elasticsearch不是原封不动的存进去,而是Analyzer组件对文档执行一系列的操作,并文档拆分成单词项。然后这些单词项作为倒排索引存储在磁盘中。我们介绍一下Analyzer的一个简要的过程:

Analyzer会将文档的内容通过在某些分隔符处拆分它们(有默认分隔符,例如空格、句号等),拆分后作为单词项,每个单词项都会作为应用在对应的字段进行过滤。所以实际上,在分析器完成分析后,一个密钥由一系列单词项组成。分析后的这些单词项存储在倒排索引中。

Elasticsearch的倒排索引

上节讨论了Analyzer将切分大单词项存入到倒排索引中,那么我们来看一下什么是倒排索引(inverterd index)。

倒排索引是 Elasticsearch 搜索的健壮性和速度的主要原因。让我们看下以下的两个文档

Document 1

{
 “name” : “this is a cat”
}

Document 2

{
“name”: “there is a cat and a dog”
}

当Analyzer进行分析后,得到以下单词项

Document 1

“name”: “this”,”is”,”a”,”cat”

Document 2

“name” : “there”,”is”,”a”,”cat”,”and”,”dog”

让我们将这些单词项聚合在一起,形成一个倒排索引

image.png

我们对一个Elasticsearch进行文档的搜索匹配的时候,会将搜索的条件进行分析,然后将这些单词项在倒排索引中进行查找,就可以迅速的查找出与该搜索条件对应的文档。

总结

今天我们对Elasticsearch索引一个新增文档进行了了解,也了解了倒排索引这个概念。

参考资料

What happens when a document is indexed in Elasticsearch?