Elasticsearch 索引操作
1、RESTful接口格式
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口
URL的格式:http://localhost:9200/<index>/<type>/[<id>]
其中index、type是必须提供的。
id是可选的,不提供es会自动生成。
index、type将信息进行分层,利于管理。
index可以理解为数据库;type理解为数据表;id相当于数据库表中记录的主键,是唯一的。
2、HTTP客户端
操作REST API常用的有通过CRUL命令,Chrome Sense插件,httpie,kibana中的Dev Tools,head等,下面主要介绍CRUL命令、kibana中的Dev Tools工具和head
2.1、curl命令
curl命令相关用法参考:http://www.cnblogs.com/shaosks/p/7483322.html
创建一个索引库
2.2、Dev Tools
GET _search
{
"query" : {
"match_all" : {}
}
}
2.3 head
3、索引文档的创建
格式:http://127.0.0.1:9200/<index>/<type>/id
3.1、curl命令
windows下安装的CURL有可能不支持单引号,如果有报错,还请改成双引号,内部使用转义字符转义。
例如:curl -XPUT http://localhost:9200/test1/es/1 -d "{\"first_name\":\"test1\"}"
添加-d
参数,在后台以守护进程模式运行
索引名字是:test1;
索引的类型是:es;
本记录的id是:1
3.2、Dev Tools
4、索引文档的查询
4.1、请求参数方式
curl 127.0.0.1:9200/fendo/_search?q=*
4.2、请求体方式(推荐这种方式)
windows下安装的CURL有可能不支持单引号,如果有报错,还请改成双引号,内部使用转义字符转义。
curl -XPOST 127.0.0.1:9200/fendo/_search?pretty -d "{\"query\": { \"match_all\": {} }}"
根据索引时的ID查询的文档的RESTful接口如下
curl -XGET "http://127.0.0.1:9200/fendo/account/25" 或 curl -XGET http://127.0.0.1:9200/fendo/account/25 后面的双引号可以不要
4.3、Dev Tools
GET /fendo/_search?pretty
{
"query": { "match_all": {} }
}
或
POST /fendo/_search?pretty
{
"query": { "match_all": {} }
}
4、索引文档的更新
根据索引时的ID更新的文档的内容其RESTful接口如下
curl -XPUT "http://localhost:9200/fendo/account/222" -d "{\"first_name\":\"fk\"}
查询一下:curl -XGET http://127.0.0.1:9200/fendo/account/222
说明更新成功
5、索引文档的删除
根据索引时的ID更新的文档的内容其RESTful接口如下
curl -XDELETE http://127.0.0.1:9200/fendo/account/222
删除成功
6、通过样例数据建立索引
6.1、下载样例数据:accounts.zip
下载样例数据集链接,解压数据到指定目录
6.2、创建一个索引库:
curl -XPUT 127.0.0.1:9200/test_index
6.3、导入数据
相对路径:curl -XPOST 127.0.0.1:9200/bank/account/_bulk?pretty --data-binary @accounts.json
accounts.json文件必须在elasticsearch-5.5.2\bin路径下
注意:
1、 需要在accounts.json所在的目录运行curl命令。
2、 127.0.0.1:9200是ES得访问地址和端口
3、 bank是索引的名称
4、 account是类型的名称
5、 索引和类型的名称在文件中如果有定义,可以省略;如果没有则必须要指定
6、 _bulk是rest得命令,可以批量执行多个操作(操作是在json文件中定义的,原理可以参考之前的翻译)
7、 pretty是将返回的信息以可读的JSON形式返回。
如果文件accounts.json 在 example_data文件夹中,二example_data文件夹在当前运行命令目录的前前一个目录里面,即example_data和elasticsearch-5.5.2目录是并列的,则命令格式如下:
curl -XPOST 127.0.0.1:9200/aaa/bbb/_bulk?pretty --data-binary "@..\..\example_data/accounts.json"
或 可以不要双引号
curl -XPOST 127.0.0.1:9200/aaa/bbb/_bulk?pretty --data-binary @..\..\example_data/accounts.json
或
curl -XPOST 127.0.0.1:9200/aaa/bbb/_bulk?pretty --data-binary @..\..\example_data\accounts.json
注意命令格式中最后的/和\都可以
查看导入的aaa索引,
curl -XPOST 127.0.0.1:9200/aaa/_search?pretty -d "{\"query\": { \"match_all\": {} }}"
7、查看所有索引索引
curl localhost:9200/_cat/indices?v
或
curl "localhost:9200/_cat/indices?v"
8、查看集群状态
curl 127.0.0.1:9200/_cat/health?v
127.0.0.1是主机的地址,9200是监听的端口号,ES默认监听的端口号就是9200.
这里需要注意的是,windows下安装的CURL有可能不支持单引号,如果有报错,还请改成双引号,内部使用转义字符转义。
得到的相应结果。
可以看到集群的名字是默认的"elasticsearch",集群的状态时"green"。这个颜色之前也有说过:
1 、绿色,最健康的状态,代表所有的分片包括备份都可用
2 、黄色,基本的分片可用,但是备份不可用(也可能是没有备份)
3 、红色,部分的分片可用,表明分片有一部分损坏。此时执行查询部分数据仍然可以查到,遇到这种情况,还是赶快解决比较好。
上面的结果还可以看到,目前有一个节点,但是没有分片,这是因为我们的ES中还没有数据,一次也就没有分片。
当使用elasticsearch作为集群名字时,会使用单播,查询本机上是否还运行着其他的节点。如果有,则组成一个集群。
(如果使用其他的名字作为集群名字,那么就可能采用多播了!这个在工作中,经常会遇到,大家使用的是一个集群名字,分片总是被搞在一起,导致有人的机器下线后,自己的也无法使用)
通过下面的命令,可以查询节点的列表:
curl 127.0.0.1:9200/_cat/nodes?v
9、总结
总结上面涉及到的命令大致如下:
1、创建索引:curl -XPUT http://localhost:9200/test1/es/1 -d "{\"first_name\":\"test1\"}"
通过文件导入:curl -XPOST 127.0.0.1:9200/bank/account/_bulk?pretty --data-binary @accounts.json
2、查询索引:curl -XPOST 127.0.0.1:9200/aaa/_search?pretty -d "{\"query\": { \"match_all\": {} }}"
curl -XGET 127.0.0.1:9200/aaa/_search?pretty -d "{\"query\": { \"match_all\": {} }}"
curl -XGET 127.0.0.1:9200/aaa/bbb/222
3、修改索引:curl -XPUT "http://localhost:9200/fendo/account/222" -d "{\"first_name\":\"fk\"}
4、删除索引:curl -XDELETE http://127.0.0.1:9200/fendo/account/222
5、查看所有索引:curl localhost:9200/_cat/indices?v