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
包含三部分信息:
请求实体就是一个文档。
注:如果安装了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返回时,它将为每个操作(以相同的发送顺序)提供状态,以便您可以检查特定操作是否失败。
- Elasticsearch 5.0版本 学习二、修改数据
- Elasticsearch学习笔记(二) mysql数据同步
- Elasticsearch 5.0版本 学习一、安装
- Elasticsearch(二)-数据
- elasticsearch学习总结(二) 集群数据分配
- Elasticsearch学习(二)
- elasticsearch学习笔记(二)
- (六)ElasticSearch修改数据
- Elasticsearch学习笔记(二)Elasticsearch入门
- elasticsearch学习笔记(二)
- Window版本ElasticSearch同步数据库数据
- elasticsearch 2.3.3版本 数据迁移工具
- elasticsearch修改mapping + 导出/导入数据
- elasticsearch Getting Started (四)-修改数据
- 1、ElasticSearch源码学习分享:ElasticSearch版本控制
- ElasticSearch对地理数据查询(二)
- Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)
- Elasticsearch 学习笔记 (二) 之 上手体验
- git命令使用-patch
- Initializing a Callout Driver
- 在xcode8中使用真机调试错误解决办法
- vue中v-for的使用,离不开的数组
- hibernate一对多、多对多级联保存与级联删除与修改外键
- Elasticsearch 5.0版本 学习二、修改数据
- 图像无缝融合研究(一)Poisson Image Editing
- handle.post 跳到主线程中执行
- 详解@SessionAttributes
- requestWindowFeature(Window.FEATURE_NO_TITLE)无效
- [LeetCode]189 Rotate Array
- C++内部函数和外部函数
- maven中properties标签定义变量
- ERP和SAP是什么意思