Elasticsearch 5.0版本 学习二、修改数据

来源:互联网 发布:juniper networks mac 编辑:程序博客网 时间:2024/05/19 20:23

前言

elasticsearch是个全文搜索工具,就是用来搜索的。现在来简单体验一下他的一些基本功能。

基本概念

在进行搜索之前,先了解一下elasticsearch的一些基本概念。

文档(document)

文档(document)是可以被索引的基本单位,在elasticsearch中文档用json格式来进行标示。如一个人员信息、某个产品信息。elasticsearch是面向文档的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。

类型(type)

在Elasticsearch,文档都归属一个类型(type),就如同java中类和对象一样,类型(type)就如同class,而文档(document)就如object。而这些类型存在于索引(index)中。

索引(index)

索引是具有某些相似特征的文档的集合。例如,您可以拥有客户数据的索引,产品目录的另一个索引,以及订单数据的另一个索引。索引由名称(必须全部为小写)标识,并且此名称用于在对其中的文档执行索引,搜索,更新和删除操作时引用索引。在单个集群中,您可以根据需要定义任意数量的索引。
一个索引(index)就像是传统关系数据库中的数据库,它是相关文档存储的地方。

在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中,我们可以画一些简单的对比图来类比传统关系型数据库:

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields

调用格式

在使用elasticsearch时,可以使用resetful API进行访问。

向Elasticsearch发出的请求的组成部分与其它普通的HTTP请求是一样的:
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'

  • 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格式的请求主体(如果请求需要的话)

简单使用

添加/修改数据

在查询之前,必须要添加几条数据。先来创建一个员工目录,为了创建员工目录,我们将进行如下操作:
- 为每个员工的文档(document)建立索引,每个文档包含了相应员工的所有信息。
- 每个文档的类型为employee。
- employee类型归属于索引megacorp。
- megacorp索引存储在Elasticsearch集群中。

下面来编写命令:

curl -XPUT http://localhost:9200/megacorp/employee/1 -d '{    "first_name" : "John",    "last_name" :  "Smith",    "age" :        25,    "about" :      "I love to go rock climbing",    "interests": [ "sports", "music" ]}'

path:/megacorp/employee/1包含三部分信息:

名字 说明 megacorp 索引名 employee 类型名 1 员工ID

请求实体就是一个文档。

注:如果安装了x-pack后,执行这个命令后,会报401错误。这是由于x-pack的权限控制,需要用户名密码的原因。因此,这个命令我们需要加上用户名密码才能够执行通过:

curl -XPUT http://localhost:9200/megacorp/employee/1 -u elastic:changeme -d ''

接下来再加入两个:

curl -XPUT http://localhost:9200/megacorp/employee/2 -u elastic:changeme -d '{    "first_name" :  "Jane",    "last_name" :   "Smith",    "age" :         32,    "about" :       "I like to collect rock albums",    "interests":  [ "music" ]}'curl -XPUT http://localhost:9200/megacorp/employee/3 -u elastic:changeme -d '{    "first_name" :  "Douglas",    "last_name" :   "Fir",    "age" :         35,    "about":        "I like to build cabinets",    "interests":  [ "forestry" ]}'

每次都输入这么长的curl命令 ,是不是很麻烦,这时候kibana的第一个作用就出来了。先启动kibana,然后输入http://localhost:5601进入kibana(如果需要用户密码,还是elastic:changeme),进入后在左边工具栏找到dev tools,点击进入可以看到console 控制台,在左边输入简化的命令,点击运行 就可以出现结果,还会有关键词提示、json格式化功能。

上面的添加就可以在dev tools中简化为

PUT /megacorp/employee/3{    "first_name" :  "Douglas",    "last_name" :   "Fir",    "age" :         35,    "about":        "I like to build cabinets",    "interests":  [ "forestry" ]}

这样就很轻松吧。

使用 PUT 方法需要明确指定 ID,两次 PUT 的 id 相同则是替换之前的文档,第二次 id 不同则是创建新的文档

更新文档

将员工1的年龄 改为29

POST megacorp/employee/1/_update{  “doc”:{“age”:29}}}

使用GET 查看文档是否更新:

GET megacorp/employee/1 

如果文档没有此字段,则会添加字段到文档中。更新只能一次在一个文档上执行。

删除文档

DELETE megacorp/employee/4

直接删除整个 index 要比删除 index 里的所有文档要更有效率

It is worth noting that it is much more efficient to delete a whole index instead of deleting all documents with the Delete By Query API.

批处理

批量添加

POST customer/external/_bulk?pretty{"index":{"_id":"1"}}{"name":"John Doe"}{"index":{"_id":"2"}}{"name":"Jane Doe"}

更新、删除

POST customer/external/_bulk?pretty{"update":{"_id":"1"}}{"doc":{"name":"John Doe become Jane Doe"}}{"delete":{"_id":"2"}}

批量API不会由于其中一个操作失败而失败。如果单个操作因任何原因失败,它将继续处理其后的其余操作。当批量API返回时,它将为每个操作(以相同的发送顺序)提供状态,以便您可以检查特定操作是否失败。

0 0
原创粉丝点击