ElasticSearch的命令调用是基于http的,提供了丰富的RESTFul API,从功能上来分可以分为4类:
(1)检查集群、节点、索引等状态信息;
(2) 管理集群、节点、索引数据及元数据;关。
(3) 执行CRUD操作及搜索操作;
(4) 执行高级搜索操作,例如paging、filtering、scripting、faceting、aggregations及其它操作;
集群、节点、索引等状态信息的查看命令:
查看健康情况 curl‘localhost:9200/_cat/health?v’
颜色代表状态:红黄绿;Node是节点个数;Shards是分片个数;Pri是分片中主分片的个数
查看索引 curl ‘localhost:9200/_cat/indices?v’
查看结点 curl ‘localhost:9200/_cat/nodes?v’
小结:此类命令都是GET请求’ip:port/_cat/XXX?v’
增删改查命令:
命令遵循的格式:
curl-X
新增修改是PUT请求,删除是DELETE请求,查询是GET
创建索引:(pretty非必要,为了使返回信息更美丽)
curl -XPUT 'localhost:9200/customer?pretty'
插入文档:
curl -XPUT 'localhost:9200/customer/car/1?pretty' -d '
{
"name": "YeJingtao"
}'
结果是:
Created表示插入成功,Shards表示有2个分片(P、R各一片ElasticSearch原理有介绍)都保存成功。
查看这条记录的命令:
curl -XGET 'localhost:9200/customer/external/1?pretty'
PS0:插入文档时类型不可省略,必须指定。
PS1:索引的创建可以是隐式的,例如在执行创建文档这一条命令时ES会自动创建索引
PS2:ID部分是可选的,如果不指定,Elasticsearch将产生一个唯一的ID来索引这个文档。从ES设计来讲,我们更关心的是对文档内容的索引,而不去关心ID是多少,所以实际应用中可以将ID交给ES维护。
修改记录:
curl -XPUT 'localhost:9200/customer/ car /1?pretty' -d '
{
"name": "YeJingtao-V2"
}'
(PUT、POST效果一样,PUT是幂等的)
删除记录:
curl -XDELETE 'localhost:9200/customer/external/1?pretty'
删除索引:
curl -XDELETE 'localhost:9200/customer'
索引删除时,索引内的类型和记录全部清除。
Bulk批量操作:
除开上面介绍的单个操作外,ES还供了一个叫bulk的API可以进行批量操作,进行大批量文档和索引的更新或删除操作,极大的提升了操作效率。
API命令格式是ip:port/index/type/_bulk–data-binary @jsonfile
Jsonfile也有格式要求,必须是一行描述信息一行文档信息
描述信息:{"index":{"_index":"stuff_orders","_type":"order_list","_id":903713}}
其中index和type不是必须的,与上面API命令中的index和type相呼应,二者选择填其一,如果都存在以json文件中的为准。
文档信息只要是标准的json格式就好,没有内容要求,例如
{"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880HolmesLane","employer":"Pyrami","email":"[email protected]","city":"Brogan","state":"IL"}
文档样例:(https://github.com/yejingtao/forblog/tree/master/elasticsearch)
命令:curl -XPOST192.168.226.133:9200/my_index/customer/_bulk?pretty --data-binary @accounts.json
再回头看下索引的状态:
有了这1000条记录,我们就可以开始ES的核心“搜索之旅”了。
搜索查询分类和简介:
从命令格式上来划分有两种方式:一是通过RESTfulrequest API传递查询参数,也称“query-string”;另一个是通过发送REST request body,也称作JSON格式。
先从直观上感觉下两种风格的差异,以下两条命令是等价的。
风格1:
curl -XGET ‘192.168.226.133:9200/my_index/_search?pretty’
风格2:
curl - XGET 'localhost:9200/ my_index /_search?pretty' -d'
{
"query": {"match_all": {} }
}'
在搜索时url中可以指定索引名和类型名以减少搜索的范围:
/_search:搜索所有索引的所有类型;
/my_index/_search:搜索my_index索引的所有类型;
/students, my_index /_search:搜索students和my_index索引的所有类型;
/ my_*/_search:搜索名称以my_开头的所有索引的所有类型;
/ my_index/customer/_search:搜索my_index索引的customer类型;
/_all/customer/_search:搜索所有索引的customer类型
PS:一旦你取回了你的搜索结果,Elasticsearch就完成了使命,它不会维护任何服务器端的资源或者在你的结果中打开游标,这也是RESTFul风格的一个特性,也注定了ES每次返回值默认是有限制的。
由于REST request body的JSON格式从可读性和灵活性来说都给开发者带来太多的美感,所以实际应用中重点使用JSON格式,这种查询语句又被称为DSL。而DSL又因原理不同被划分为查询DSL(query DSL)和过滤DSL(filter DSL)。
DSL格式如果再使用linux的curl命令来书写那真是太累了,这里我们使用ELK组合中的Kibana来帮助我们查询ES。
下载地址:https://www.elastic.co/downloads/kibana
按照官网山教程
1下载解压,2配置config/kibana.yml,3执行bin/kibana,4浏览器访问http://localhost:5601
万事俱备,下一篇开始啃query、filter、聚合三种具体搜索命令。