Elasticsearch随笔—狂神
概念理解:
索引:一个容器,类似于mysql中的表。
类型:索引中数据的映射类型。如整形,字符串,时间类型等。和表中的字段类型相似。
文档:类似mysql表中的一条记录
- es就算是只有一个节点,ta也是一个集群!
- 索引存储了映射类型的字段和其他设置。
工作原理:
创建一个索引,默认会创建5个分片(这里面会有一个主分片),每个主分片会有一个副本分片(复制分片)。
多个节点组成一个集群。es的节点上可以有多个索引。
es索引的主副分片会保存在不同的节点上,这样一个节点挂了,其他节点上的数据还能访问,这样系统也能正常运行下去。
es索引中的一个分片就是一个lucene索引,这个分片就是一个包含倒排索引的文件目录。
倒排索引的结构使得es在不扫描全表的情况下,告诉你,哪些文档有哪些关键字,要搜索某个词的时候,直接去到这个“倒排索引”里面匹配这个搜索词,就知道哪些文档包含了这个词,然后返回这些文档。
什么是倒排索引?
es使用的是【倒排索引】的数据结构,这种数据适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含ta的文旦列表。列如,现在有两个文档,每个文档包含如下内容:
1 | Study every day, good good up to forever # 文档1包含的内容 |
为了创建倒排索引,我们首先要将每个文档拆分成独立的词(词条),然后创建一个包含所有不重复的词条的排序列表,然后列出每个词条出现在哪个文档:
term | doc_1 | doc_2 |
---|---|---|
Study | ✔ | ✖ |
To | ✖ | ✖ |
every | ✔ | ✔ |
forever | ✔ | ✔ |
day | ✔ | ✔ |
study | ✖ | ✔ |
good | ✔ | ✔ |
every | ✔ | ✔ |
to | ✔ | ✖ |
up | ✔ | ✔ |
现在,我们试图搜索 to forever ,只需要查看包含每个词条的文档
term | doc_1 | doc_2 |
---|---|---|
forever | ✔ | ✔ |
to | ✔ | ✖ |
统计➡ | 2 | 1 |
两个文档都匹配,但是第一个文档比第二个匹配程度更高。如果没有别的条件,现在,这两个包含关键词的文档都将返回。