Elasticsearch简介
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
一. 关键词概念
倒排索引(Inverted Index)
该索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。Elasticsearch能够实现快速、高效的搜索功能,正是基于 倒排索引原理
节点 & 集群(Node & Cluster)
Elasticsearch 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个Elasticsearch实例。单个Elasticsearch实例称为一个节点(Node),一组节点构成一个集群(Cluster)
索引(Index)
Elasticsearch 数据管理的顶层单位就叫做 Index(索引),相当于关系型数据库里的数据库的概念。另外,每个Index的名字必须是小写
类型(Type)
类似关系型数据库中的数据表,不同的 Type 应该有相似的结构(Schema),性质完全不同的数据(比如 products 和 logs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)
文档(Document)
Index里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。Document 使用 JSON 格式表示。同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。
文档元数据(Document metadata)
文档元数据为_index, _type, _id, 这三者可以唯一表示一个文档,_index表示文档在哪存放,_type表示文档的对象类别,_id为文档的唯一标识。
每个Document都类似一个JSON结构,它包含了许多字段,每个字段都有其对应的值,多个字段组成了一个 Document,可以类比关系型数据库数据表中的字段。
在 Elasticsearch 中,文档(Document)归属于一种类型(Type),而这些类型存在于索引(Index)中,下图展示了Elasticsearch与传统关系型数据库的类比:
字段(Fields)
二. 入门
elasticsearch是基于RESTful风格的接口
HTTP方法 | 说明 |
---|---|
GET | 获取请求对象的当前状态 |
POST | 改变对象的当前状态 |
PUT | 创建一个对象 |
DELETE | 销毁对象 |
HEAD | 请求获取对象的基础信息 |
1. GET 常用API
查看所有节点 _cat/nodes
查看节点的健康状态 _cat/health
查看所有索引 _cat/indices
2. PUT 常用API
2.1 PUT添加
创建一条记录
用MySQL的方式来表达的话可以翻译成:创建一条名为testbase1的数据库(索引)和名为testtable1的表(类型),并为他插入一条id为1的数据 { 大括号内的数据就是插入的数据 }
用put方式添加必须指定id,如果是POST方式添加,他会添加成功,并且返回随即生成id
查询这条刚插入的数据 用GET方式来请求
用MySQL的方式来表达的话可以翻译成:查询数据testbase1的数据库下,testtable1表 id为1 的这条数据
2.2 再次添加重复的记录 (修改)
还是添加id为1 的这条数据,这里会覆盖之前的数据,然后版本号+1
多添加一个字段
版本号再此发生了变化
3. POST 常用API
3.1 POST 执行添加
指定id
这里的用法和put是一样的
不指定id
返回随机id
3.2 POST 执行修改
将id为1这条数据的name修改
路径后面带 _update
他会与原值作比较,如果没有发生变化他不会执行修改,并且版本号也不会变
4. DELETE 常用API
4.1 删除某条数据
4.2 删除整个数据库(索引)
4.3 不能删除表(类型)
5. 批量操作 _bulk
运行: