一、ES基本操作
1._cat
查看所有节点
GET _cat/nodes
查看ES健康状况
GET _cat/health
查看主节点
GET _cat/master
#查看所有索引 类似于MySQL的: show databases;
GET _cat/indices
2.保存一个索引文档
保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识
在 customer索引下的 external类型下保存 1号数据为
PUT customer/external/1
{
"name":"Jone"
}
PUT和 POST都可以,POST新增。如果不指定 id,会自动生成 id。指定 #id就会修改这个数据,并新增版本号PUT可以新增可以修改。PUT必须指定 id;由于 PUT需要指定 #id,我们一般都用来做修改操作,不指定 id会报错。
3.查询文档
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
4.更新文档
POST customer/external/1/_update
{
"doc":{
"name":"jone_new1103"
}
}
或者
POST customer/external/1
{
"name":"jone_new_post_2"
}
或者
PUT customer/external/1
{
"name":"jone_new_post_3"
}
POST与PUT更新的不同:
POST操作会对比源文档数据,如果相同不会有什么操作,文档 #version不增加
PUT操作总会将数据重新保存并增加 version版本;
带_update对比元数据如果一样就不进行任何操作。
看场景;
对于大并发更新,不带 update;
对于大并发查询偶尔更新,带 update;对比更新,重新计算分配规则。
#更新同时增加属性
POST customer/external/1/_update
{
“doc”: {“name”:“jhon_s”,“age”:“14”}
}
#PUT和 POST不带_update也可以:
POST customer/external/1
{
“doc”: {“name”:“jhon_s”,“age”:“14”}
}
PUT customer/external/1
{
“doc”: {“name”:“jhon_s”,“age”:“14”}
}
5.删除文档
DELETE customer/external/1
DELETE customer
6.批量删除
先批量新增
POST customer/external/_bulk
{
"index":{
"_id":"1"}}
{
"name": "John Doe" }
{
"index":{
"_id":"2"}}
{
"name": "Jane Doe" }
语法格式:
{ action: { metadata }}
{ request body}}
{ action: { metadata }}
{ request body
#复杂实例:
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返回时,它将提供每个动作的状态(与发送
的顺序相同),所以您可以检查是否一个指定的动作是不是失败了。
二.复杂搜索
1.样本测试数据导入,以便测试
文档下载地址:https://gitee.com/huangjun19921127_admin/dowin/blob/master/accounts.json
POST bank/account/_bulk
{
这里就是你下载的测试数据,批量导入一下
}
说明:这是一份顾客银行账户信息的虚构的 #JSON文档样本。每个文档都有下列的schema
#(模式):
{
"account_number": 0,
"balance": 16623,
"firstname": "Bradshaw",
"lastname": "Mckenzie",
"age": 29,
"gender": "F",
"address":