ElasticSearch入门检索
前面简介说到 elsatic是通过RestFul API接口操作数据的,可以通过postman模拟接口请求测试一下
一、_cat
1、GET /_cat/nodes:查看所有节点
2、GET /_cat/health:查看 es 健康状况
3、GET /_cat/master:查看主节点
4、GET /_cat/indices:查看所有索引 类似mysql中的show databases;
二、索引一个文档(保存)
保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识
PUT customer/external/1;在 customer 索引下的 external 类型下保存 1 号数据
PUT 和 POST 都可以新增
POST 新增。如果不指定 id,会自动生成 id。指定 id 就会修改这个数据,并新增版本号
PUT 可以新增可以修改。PUT 必须指定 id;由于 PUT 需要指定 id,我们一般都用来做修改
操作,不指定 id 会报错。
三、查询文档
GET customer/external/1
查询返回结果:
{
"_index": "customer", //在哪个索引
"_type": "external", //在哪个类型
"_id": "1", //记录 id
"_version": 2, //版本号
"_seq_no": 1, //并发控制字段,每次更新就会+1,用来做乐观锁
"_primary_term": 1, //同上,主分片重新分配,如重启,就会变化
"found": true,
"_source": { //真正的内容
"name": "John Doe"
}
}
乐观锁更新携带 ?if_seq_no=0&if_primary_term=1,携带的数据要和查询出来的保持一致,要不然会报错
四、更新文档
1、POST customer/external/1/_update
{
"doc":{
"name": "Doew"
}
}
2、POST customer/external/1
{
"name": "Doe2"
}
3、PUT customer/external/1
{
"name": "Doe"
}
以上三种方式都可以进行更新数据
第一种方式POST请求带有_update会进行对比元数据,如果与原来的数据一模一样就什么都不做,version、seq_no字段都不变
第二种和第三种不会对比元数据,会直接修改 version、seq_no等字段也会改变
结论:根据场景,对于大并发更新,不带_update。
对于并发查询但是偶尔更新的带 _update;对比更新,会重新计算分配规则
更新同时增加属性
POST customer/external/1/_update
{
"doc": {
"name": "Jane Doe",
"age": 20
}
}
PUT 和 POST 不带_update 也可以
注意:POST带_update ,必须带有doc
五、删除文档&索引
删除文档:DELETE customer/external/1
删除索引:DELETE customer
注意:Elastic没有提供删除类型的操作
六、bulk 批量 操作API
这个需要用到Kibana的dev-tools测试批量
Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据
1.指定索引的批量操作
POST customer/external/_bulk
{"index":{"_id":"1"}}
{"name": "XiaoMing" }
{"index":{"_id":"2"}}
{"name": "xiaoHong" }
2.不指定索引,对Elastic进行操作
POST /_bulk
{ "delete": { "_index": "website", "_type": "blog", "_id": "123" }}
{ "create": { "_index": "website", "_type": "blog", "_id": "123" }}
{ "title": "My first blog post" }
{ "index": { "_index": "website", "_type": "blog" }}
{ "title": "My second blog post" }
{ "update": { "_index": "website", "_type": "blog", "_id": "123"} }
{ "doc" : {"title" : "My updated blog post"} }
bulk API 以此按顺序执行所有的 action(动作)。如果一个单个的动作因任何原因而失败,
它将继续处理它后面剩余的动作。当 bulk API 返回时,它将提供每个动作的状态(与发送
的顺序相同),所以您可以检查是否一个指定的动作是不是失败了。
3.样本测试数据
Elastic官方提供了银行测试数据
https://github.com/elastic/elasticsearch/tree/master/docs/src/test/resources
POST bank/account/_bulk
导入测试数据,下面进行进阶检索