Elasticsearch简介与实战 (2)

  Index里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。Document 使用 JSON 格式表示。同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。

类型(Type)

  Document 可以分组,比如employee这个 Index 里面,可以按部门分组,也可以按职级分组。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document,类似关系型数据库中的数据表。
  不同的 Type 应该有相似的结构(Schema),性质完全不同的数据(比如 products 和 logs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。

文档元数据(Document metadata)

  文档元数据为_index, _type, _id, 这三者可以唯一表示一个文档,_index表示文档在哪存放,_type表示文档的对象类别,_id为文档的唯一标识。

字段(Fields)

  每个Document都类似一个JSON结构,它包含了许多字段,每个字段都有其对应的值,多个字段组成了一个 Document,可以类比关系型数据库数据表中的字段。
  在 Elasticsearch 中,文档(Document)归属于一种类型(Type),而这些类型存在于索引(Index)中,下图展示了Elasticsearch与传统关系型数据库的类比:

Elasticsearch简介与实战

Elasticsearch入门

  Elasticsearch提供了多种交互使用方式,包括Java API和RESTful API ,本文主要介绍RESTful API 。所有其他语言可以使用RESTful API 通过端口 9200 和 Elasticsearch 进行通信,你可以用你最喜爱的 web 客户端访问 Elasticsearch 。甚至,你还可以使用 curl 命令来和 Elasticsearch 交互。
  一个Elasticsearch请求和任何 HTTP 请求一样,都由若干相同的部件组成:

curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'

返回的数据格式为JSON,因为Elasticsearch中的文档以JSON格式储存。其中,被 < > 标记的部件:

部件 说明
VERB   适当的 HTTP 方法 或 谓词 : GET、 POST、 PUT、 HEAD 或者 DELETE。  
PROTOCOL   http 或者 https(如果你在 Elasticsearch 前面有一个 https 代理)  
HOST   Elasticsearch 集群中任意节点的主机名,或者用 localhost 代表本地机器上的节点。  
PORT   运行 Elasticsearch HTTP 服务的端口号,默认是 9200 。  
PATH   API 的终端路径(例如 _count 将返回集群中文档数量)。Path 可能包含多个组件,例如:_cluster/stats 和 _nodes/stats/jvm 。  
QUERY_STRING   任意可选的查询字符串参数 (例如 ?pretty 将格式化地输出 JSON 返回值,使其更容易阅读)  
BODY   一个 JSON 格式的请求体 (如果请求需要的话)  

对于HTTP方法,它们的具体作用为:

HTTP方法 说明
GET   获取请求对象的当前状态  
POST   改变对象的当前状态  
PUT   创建一个对象  
DELETE   销毁对象  
HEAD   请求获取对象的基础信息  

  我们以下面的数据为例,来展示Elasticsearch的用法。

Elasticsearch简介与实战

以下全部的操作都在Kibana中完成,创建的index为conference, type为event .

插入数据

  首先创建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. 类似于上面的操作,依次插入剩余的4条数据,完成插入后,查看数据如下:

插入数据

删除数据

  比如我们想要删除conference中event里面id为5的数据,只需运行下面命令即可:

DELETE /conference/event/5

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppwwg.html