这段时间项目上在研究ElasticSearch,所以记录一下学习心得,如有不对或者有需要补充的地方,麻烦各位小伙伴积极指出!
ES核心术语
index索引 数据库的表
document 数据库的表中对应的数据行
field 数据库中字段列
ES的优势
mapping映射 对应的表结构定义
近实时NRT Near Real Time 好比在github上建了一个仓库,基本耗时1S,最快可以1S内可以被搜索到
节点node 可以使用分布式集群(相当于一台服务器就是一个节点,独立也可以使用)
shard replica 数据分片与备份(分片【shard】:把索引库拆分为多份,分布在不同的节点上,比如有2个节点,这2个节点的所有数据可以组成一个完整的索引库,分别存在这2个节点,目的是水平扩展,可以有效的提高吞吐量。备份【replica】每个节点的备份)在每个分片上会有一个ES的进程,会有一定的计算能力,在分片存在的同时,ES会对相应的分片进行备份,假如此时还是2个节点,当其中一个节点挂了以后,会立即把此节点备份的数据挂载到另外一个节点上。分片【shard】也可以被称为primary shard(主分片),备份【replica】也可以被称为replica shard (备份),如果后期数据达到6T的数据量的话,需要配置6个shard分片
ES处理数据的一个方式 倒排索引
比如我下面的例子: 以下数据其实就是对应数据中的一张表的3行数据,右图是ES中的排序方式
文档ids表示单词在表中存在的数据行(表示数据在左边的第几行)简单来说就是根据key查找value这个属于正排索引
id name 单词 文档ids 词频TF;位置POS
1 肯德基真好吃 肯德基 1,2,3 1:1:<1>,2:1:<1>,3:1:<1>
2 肯德基是快餐 真 1 1:1:<3>
3 肯德基好吃的不行 好吃 3 3:1:<3>
是 2 2:1:<3>
的 3 3:1:<5>
快餐 2 2:1:<4>
不行 3 3:1:<6>
以下是根据右上图的文档ids,我们可以得出以下数据:倒排索引是根据value来查找对应的key,
我们以1:1:<1>为例,第一个1是表示单词所在的行Id,第二个1表示在单词所在行Id出现的次数,<1>表示单词所在行Id的位置,索引是从0开始的。出现的频率越高,越容易被用户搜索的到。