一、什么是Elasticsearch?
Elasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。
- 一个分布式的实时文档存储,每个字段可以被索引与搜索;
- 一个分布式实时分析搜索引擎;
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
Kibana 是一个开源的分析和可视化平台,旨在与 Elasticsearch 合作。Kibana 提供搜索、查看和与存储在 Elasticsearch 索引中的数据进行交互的功能;
1.倒排索引(Inverted Index)
由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index);
2.节点 & 集群(Node & Cluster)
Elasticsearch 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个Elasticsearch实例。单个Elasticsearch实例称为一个节点(Node),一组节点构成一个集群(Cluster);
3.索引(Index) Elasticsearch 数据管理的顶层单位叫做index(索引),相当于关系型数据库里的数据库的概念;每个index的名字必须小写;
4.文档(Document)
inde里面单条记录称为document(文档),多个document构成一个index,document使用JSON格式表示;
5.类型(type)
document可以分组,比如employee这个index里面,可以按部门、年龄进行分组,这种分组叫做type,它是虚拟的逻辑分组,用来过滤document,类似关系数据库的数据表;
6.文档元数据(Document matadata)
文档元数据为_index, _type, _id, 这三者可以唯一表示一个文档,_index表示文档在哪存放,_type表示文档的对象类别,_id为文档的唯一标识。
7.字段(Fields)
每个Document都类似一个JSON结构,它包含了许多字段,每个字段都有其对应的值,多个字段组成了一个 Document,可以类比关系型数据库数据表中的字段。
二、Elasticsearch入门
以下全部的操作都在Kibana中完成,创建的index为conference, type为event .
1.插入数据
创建index为conference, 创建type为event, 插入id为1的第一条数据:
PUT /conference/event/1 { "host": "Dave", "title": "Elasticsearch at Rangespan and Exonar", "description": "Representatives from Rangespan and Exonar will come and discuss how they use Elasticsearch", "attendees": ["Dave", "Andrew", "David", "Clint"], "date": "2013-06-24T18:30", "reviews": 3 }
路径/conference/event/1表示文档的index为conference, type为event, id为1;
2.删除数据
删除conference中event里面id为5的数据:
DELETE /conference/event/5
删除整个event类型
DELETE /conference/event
删除整个conference索引:
DELETE /conference
3.修改数据:
将conference中event里面id为4的文档的作者改为Bob
POST /conference/event/4/_update { "doc": {"host": "Bob"} }
4.查询数据:
查询conference中event里面id为1的数据:
GET /conference/event/1
搜索conference中event里面所有的文档:
GET /conference/event/_search
查询表达式:
检索conference中event里面所有host为Bob的文档:
GET /conference/event/_search { "query" : { "match" : { "host" : "Bob" } } }
搜索下所有description中含有"use Elasticsearch"的event:
GET /conference/event/_search { "query" : { "match" : { "description" : "use Elasticsearch" } } }
搜索下所有description中严格含有"use Elasticsearch"这个短语的event:
GET /conference/event/_search { "query" : { "match_phrase": { "description" : "use Elasticsearch" } } }