前阵子看了一下es文档中关于shards原理的介绍,于是按照自己的理解总结了一下,基本上是照着原文翻译的,个别部分是按照自己的理解写的。
逆向索引/倒排索引:
与传统的数据库不同,在es中,每个字段里面的每个单词都是可以被搜索的。如hobby:"dance,sing,swim,run",我们在搜索关键字swim时,所有包含swim的文档都会被匹配到,es的这个特性也叫做全文搜索。
为了支持这个特性,es中会维护一个叫做“invertedindex”(也叫逆向索引)的表,表内包含了所有文档中出现的所有单词,同时记录了这个单词在哪个文档中出现过。
在Elasticsearch中, 需要搞清楚几个名词,如segment/doc/term/token/shard/index等, 其实segment/doc/term/token都是lucene中的概念。这样有助于更深入的了解和使用ES。
document: 索引和搜索的主要数据载体,对应写入到ES中的一个doc。
field: document中的各个字段。
term: 词项,搜索时的一个单位,代表文本中的某个词。
token: 词条,词项(term)在字段(field)中的一次出现,包括词项的文本、开始和结束的位移、类型等信息。
Lucene内部使用的是倒排索引的数据结构, 将词项(term)映射到文档(document)。
例如:某3个文档,假设某个字段的文本如下
ElasticSearch Server (文档1)
Matering ElasticSearch (文档2)
Apache solr 4 Cookbook (文档3)
term | 次数 | doc id |
4 | 1 |