Elasticsearch的基本概念和指标
背景
在13年的时候,我开始负责整个公司的搜索引擎。嗯……,不是很牛的那种大项目负责人。而是整个搜索就我一个人做。哈哈。
后来跳槽之后,所经历的团队都用Elasticsearch,基本上和缓存一样,是项目必备的工具。目前静儿在做的项目中也在用,正好系统学习一下。毕竟静儿的梦想就是打造自己的搜索引擎。
目录
1.近实时(NRT NearRealtime)
2.集群(Cluster)
3.节点(Node)
4.索引(Index)
5.文档(Document)
6.分片和副本(Shards & Replicas)
7.缓存数据(fielddata)
8.文档值(doc values)
9.行为模式(norms)
10.召回率(Recall Rate)
11.准确率(Precision)
正文
1.近实时(NRT NearRealtime)
ES是一个近实时的搜索平台,就是说从开始创建索引到能被搜索到只有很少的延时(通常是1s)。
2.集群(Cluster)
集群是一个或者多个节点(Node)协同工作来承载所有的数据,并提供跨所有节点的索引和搜索能力。一个集群有一个唯一名称作为标识,默认叫「elasticsearch」。因为在有多个节点的情况下,节点都是通过集群名来确定被安装到哪个集群,所以集群名很重要。
3.节点(Node)
节点是集群的一部分,就是集群里的一个服务器。它存储着数据,给提供集群的索引和搜索能力。像集群一样,一个节点也是用名称来做标识。它默认是一个在节点启动时被指定的随机UUID(Universally Unique Ientifier全局唯一标识)。如果不想用默认值,也可以自定义节点名。因为它是作为网络中的服务器和节点关系的纽带,所以这个名字对集群的管理来说很重要。
4.索引(Index)
索引是有相同特性的文档集合。举个栗子🌰:可以定义一个存储客户端数据的索引,建一个产品目录索引,再来一个顺序数据的索引。它也是靠名称来作为唯一标识的。通过索引名可以对索引内的文档进行索引添加、更新、搜索、删除等操作。
5.文档(Document)
文档是可以被索引的最小单元。举个栗子🌰:可以定义一个存储客户端数据的文档,建一个产品目录文档,再来一个顺序数据的文档。文档是用JSON(JavaScript Object Notation)来表示的。JSON是一个非常通用的数据传输形式。
6.分片和副本(Shards & Replicas)
为了解决让索引可以存储超过一个节点机器硬件限制的数据的问题。ES提供了将索引分割成多块的能力。这个数据小块叫做分片。创建索引时可以指定分片数量(副本数)。每个分片内部都是独立的,功能完整的。可以随便移植到集群的任何一个节点上。
7.缓存数据(fielddata)
缓存数据是文本字段使用的一个用于内存查询的数据结构。这个数据结构是第一次使用的时候被按需加载来用于聚合、排序或者脚本运算的。是通过读取所有段内的整个倒排索引,反转词条和文档关系,把结果存储到JVM堆中实现的。
8.文档值(doc values)
通过数据结构来进行聚合工作被叫做文档值。文档值是让聚合快速、高效、内存友好的手段。
9.行为模式(norms)
norms中国人一般大家也说norms。因为翻译过来的不能很贴切的表达原义。它存储了很多用于查询时计算评分的标准引子。
10.召回率(Recall Rate)
召回率也叫查全率是检索出的相关文档数和文档库中所有的相关文档数的比率。衡量的是检索结果是查全率。
11.准确率(Precision)
准确率也叫精度是检索出的相关文档数与检索出的文档总数的比率。衡量的是检索结果的查准率。
总结
不负春光不负卿!
推荐阅读
漫画:性能、可用性和锁
架构视角-文件的通用存储原理
为什么要持续重构
作者是一个有美国硅谷、日本东京工作经验,十二年坚持一线写代码的程序媛。坚持原创文章。欢迎技术交流!