什么是ElasticSearch?
数据检索几乎是所有IT系统的基本需求,MySQL为此专门提供了条件查询、模糊查询LIKE
和全文索引FULLTEXT
。
下面是一张简化后的MySQL商品数据表。
id | name |
---|---|
1 | 2024笔记本电脑新款全新2.5K护眼屏商务出差办公 |
2 | 戴睿2.5K超清IPS屏极光X14电脑轻薄商务办公 |
3 | 轻薄便携32G金属笔记本电脑大学生超薄商务办公学习 |
4 | 2024新款AI笔记本电脑全新商务办公学习轻薄 |
5 | 英特尔2024新品14英寸笔记本电脑酷睿i7轻薄便携学生超薄办公 |
如果MySQL要在这张商品表中找到i7
关键字,就只能通过模糊查询(LIKE
)的方式,一行行地找。哪怕有再多索引,也得从第一行开始,直至找到最后一行。
这是一种用Key
找Value
的方式,也就是通过ID找内容
,也称为顺排索引。
和它相对的,就是倒排索引。
如果用倒排索引来实现刚才的那个查询需求,它会把内容分解成下面这样的结构。
单词id | 单词 | 出现次数 | 文档id:位置id |
---|---|---|---|
1 | 2024 | 3 | {1,0} , {4,0} , {5,0} |
2 | 笔记本 | 4 | {1,1} , {3,4} , {4,3} , {5,4} |
3 | 电脑 | 5 | {1,2} , {2,6} , {3,5} , {4,4} , {5,5} |
4 | 全新 | 2 | {1,4} , {4,5} |
5 | 2.5K | 2 | {1,5} , {2,1} |
6 | 商务 | 4 | ... |
7 | 出差 | 1 | ... |
8 | 办公 | 5 | ... |
9 | i7 | 1 | {1,7} |
... | ... | ... | ... |
即使是是一个完整的句子,也可以通过将它拆分(也就是进行分词)的方式,来逐个匹配。
这种索引方式,比MySQL使用的顺排索引效率更高,而且功能更强,更精准。
Elasticsearch就是这样一种专门用来实现搜索功能的NoSQL搜索引擎,它正是基于倒排索引实现的。
作为一种NoSQL系统,它同样也不遵循结构化数据存储的套路,但也不完全像MongoDB这种非结构化数据那样可以实现保存什么类型,就定义什么类型
,而是介于它们二者之间。

Elasticsearch像MySQL一样,需要预先定义Index
和Type
,但却可以像MongoDB一样,不必事先定义Field
,而是保存什么类型,就定义什么类型
(当然,也可以事先定义Field
,避免脏数据)。
Elasticsearch是一个分布式的倒排索引系统。为了管理庞大的数据,它和MongoDB一样,也采用了类似于MongoDB分片和MongoDB副本集的技术。

Elasticsearch的所有分片(Shard)
和副本(Replica)
都是运行在节点(Node)
之上的,而若干个节点(Node)
则组成了完整的Elasticsearch集群(Cluster)
。
感谢支持
更多内容,请移步《超级个体》。