什么是Elasticsearch
elasticsearch是一个全文搜索引擎,用于快速的存储、搜索及海量数据的分析引擎
为什么用Elasticsearch
elasticsearch是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上
Lucene是目前存在不论开源还是私有的,拥有最先进、高性能的搜索引擎库,但也仅之时一个库。但要用上Lucene我们需要编写java引入Lucene包才可以使用,而且我们需要对信息检索有一定程度的理解才能明白 Lucene 是怎么工作的,反正用起来没那么简单。
而elasticsearch则是使用java编写,内部使用Lucene索引及搜索,它使目标索引变得简单,相当于对Lucene进行了封装并提供了一套简单一直的API来帮助我们进行索引存储
但elasticsearch并不仅是一个简单的Lucene的封装的全文搜索引擎,它还包括了以下三个特性内容:
1、分布式的实时文档存储,每一个字段都可以被索引搜索
2、实时分析的搜索引擎
3、能胜任上百个服务器节点的扩展,并支持PB级的结构化或非结构化数据
Elasticsearch的相关概念
在elasticsearch中有几个基本的概念,如节点、索引、文档等等
Node 和 Cluster (节点和集群)
单个elasticsearch实例称之为一个节点,而多个节点的组成称之为集群
Index (索引)
elasticsearch会索引所有的字段,经过处理后写入一个反向索引。查找数据的时候直到查到该索引。
所以elasticsearch数据管理的顶层单位叫做索引,其实与mysql等数据库的索引概念是一样的。值得注意的是每一个索引名称必须为小写
Document (文档)
索引里单条的数据记录称之为文档,由许多条文档构成一个索引
文档使用json格式表示,同一个索引里的文档不要求有相同的结构,但最好保持相同结构,这样可以有效的提高搜索效率
Type (类型)
文档可以分组,例如product索引中,可以按价格分组,也可以按颜色分组。这种分组就叫做类型,类型是一个虚拟的逻辑分组,用来过滤文档,类似与数据库中的表
不同的类型应该有相似的结构,例如id字段不能在一个组是字符串,在另一组为数值。这与关系型数据库表的区别是一样的。性质完全不同的数据应该存入不同的索引之中
注: ES 6版本只允许每个索引包含一个类型, ES 7版本以移除类型
Fields (字段)
每一个文档都有一个类似json的结构,其包含多个字段,每个字段都有其对应的值,多个字段组成一个文档
在ES中,文档归属于一种类型,而这些类型存在于索引中,类似的ES关系图与关系型数据库的对比为:
关系型数据库 -> 数据库 -> 表 -> 行 -> 字段
ES库 -> 索引 -> 类型 -> 文档 -> 字段