Elasticsearch—CRUD

一.Elasticsearch基本操作索引的Restapi :增删改查

  1.PUT创建一个资源

1.1 创建一个索引 put my_index(类似于数据库中建表)

1.2创建一个索引 my_index1
PUT /my_index1
{
    "settings": {
        "number_of_shards" : 1,
        "number_of_replicas" : 1
    }
}

 

  • my_index:为索引名称(相当于数据库的表)
  • doc :为索引的类型,可自己指定名称。
  • dynamic:用于配置动态映射,当插入数据的时候遇上如果数据库字段中有,索引中没有的字段,以下三种设定值会起到不同的效果true:动态添加新的字段–缺省false:忽略新的字段(正常插入数据)strict:如果遇到新字段抛出异常设置分片number_of_shards:每个索引的主分片数,默认值是 5 。这个配置在索引创建后不能修改。number_of_replicas:每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可以随时修改。
  • id,name,sex,title,city:分别为字段名称(可根据自己的需求创建多个字段)

类型为text时表示需要对该字段进行分词, analyzer类型为keyword时表示不需要对该字段进行分词

1.3 索引下添加文档 (类似于数据库中添加一条记录),指定id,id存在则修改,版本加1,不存在就多新加一条,
PUT lib/blog/3
{
  "id":4,
  "title": "正则语法",
  "content": "静态工厂,学习记录",
  "postdate": "2013-12-11",
  "url": "http://192.168.95.4:5601/app/kibana#/dev_tools/console?_g=()"
}

 

1.4不指定id(自动生成id)
POST lib/blog/
{
  "id":4,
  "title": "正则语法",
  "content": "静态工厂,学习记录",
  "postdate": "2013-12-11",
  "url": "http://192.168.95.4:5601/app/kibana#/dev_tools/console?_g=()"
}

 

  2.POST修改或跟新一个资源

2.1 修改 my_index索引下的user文档的中id等于2 的属性title改为"python",用put再次添加直接覆盖
PUT lib/blog/2
{
  "id":4,
  "title": "python",
  "content": "静态工厂,学习记录",
  "postdate": "2013-12-11",
  "url": "http://192.168.95.4:5601/app/kibana#/dev_tools/console?_g=()"
}

2.2 直接修改lib索引下的blog文档的中id等于"AW7pP_hpSp_vcrhFE-fx" 的title属性改为"正则语法+使用"
POST lib/blog/AW7pP_hpSp_vcrhFE-fx/_update
{
  "doc":{
    "title": "正则语法+使用"
  }
}

  3.DELETE删除一个资源

3.1.1 根据索引名称删除索引

DELETE my_index

3.1.2 删除my_index索引下user类型中Id等于1的文档 
DELETE my_index
/user/1

  4.GET获取一个资源

4.1 Get 查看

4.1.1 索引名称查看索引信息

  get my_index1

4.1.2 查询my_index索引的user类型下的所有文档,默认情况下搜索会返回前10个结果。

  get my_index/user/_search

4.1.3 根据ID去查询文件

  get my_index/user/AW4QUmvsPVVF6o889z5Y

4.1.3 查看文件的部分属性

  get my_index/user/AW4QUmvsPVVF6o889z5Y?_source=name,age

4.1.4 查看my_index索引的user类型下所有文件中name属性叫Helen的

  GET my_index/user/_search?q=name:Helen

4.1.5 查看所有索引

  get _allget *

4.1.6 查看my_index1索引的配置

  get my_index1/_settings

4.2 MuitiGet批量获取文档

  4.2.1 多个索引下筛选出数据

  

GET /_mget
{
  "docs":[
         {
        "_index":"lib",
        "_type":"blog",
        "_id":2
        },
          {
        "_index":"lib1",
        "_type":"books",
        "_id":"AW7ZNiloC3UFf3ScjnLI"
        }
    ]
}

4.2.2 指定字段获
GET /_mget
{
  "docs":[
         {
        "_index":"lib",
        "_type":"blog",
        "_id":2,
        "_source":["title","content","postdate"]
        },
          {
        "_index":"lib1",
        "_type":"books",
        "_id":"AW7ZNiloC3UFf3ScjnLI",
        "_source":["title","price","date"]
        }
    ]
}

  4.2.3 同意索引下同类型的文档
GET lib/blog/_mget
{
  "docs":[
    {"_id":2},
    {"_id":3}
    ]
}

  4.2.4 同意索引下同类型的文档,简化写法
GET lib/blog/_mget
{
  "ids":[2,3]
}

5.Bulk API实现批量操作

  • bulk允许在一个请求中进行多个操作(create、index、update、delete),也就是可以在一次请求裡做很多事情

  • 也由于这个关系,因此bulk的请求体和其他请求的格式会有点不同

5.1bulk的请求模板

分成action、metadata和doc三部份

action : 必须是以下4种选项之一

index(最常用) : 如果文档不存在就创建他,如果文档存在就更新他

create : 如果文档不存在就创建他,但如果文档存在就返回错误

使用时一定要在metadata设置_id值,他才能去判断这个文档是否存在

update : 更新一个文档,如果文档不存在就返回错误

使用时也要给_id值,且后面文档的格式和其他人不一样

delete : 删除一个文档,如果要删除的文档id不存在,就返回错误

使用时也必须在metadata中设置文档id,且后面不能带一个doc,因为没意义,他是用id去删除文档的

metadata : 设置这个文档的metadata,像是id、index、_type...

doc : 就是一般的文档格式

POST 127.0.0.1/mytest/doc/_bulk
{ action : { metadata } }
{ doc }
{ action : { metadata } }
{ doc }
....

 

5.2批量添加
POST my_index/books/_bulk
{"index":{"_id":1}}
{"title":"java","price":35}
{"index":{"_id":2}}
{"title":"HTML5","price":45}
{"index":{"_id":3}}
{"title":"php","price":25}
{"index":{"_id":4}}
{"title":"python","price":28}

5.2.1.批量查询

GET my_index/books/_mget
{
  "ids":[1,2,3,4 ]
  }

 

5.3批量操作
POST my_index/books/_bulk
{"delete":{"_ index":"my_index","_ type":"books","_id":4}}
{"create":{"_ index":"tt","_ type":"ttt","_id":100}}
{"name":"lisi"}
{"index":{"_ index":"tt","_type":"ttt"}}
{"name":"zhaosi"}
{"update":{"_ index":"my_index","t ype":"books","id":4}}
{"doc":{"price":58}}
5.4bulk一次能处理多大的数据量

bulk把将要处理的数据载入内存中,所以数据量是有限制的,最佳的数据量不是一个确定的数值,它取决于你的硬件,你的文档大小以及复杂你的素引以及搜索的负载。

一般议是1000-5000个文档,大小建议是5-15MB,默认不超过100M,可以在es的配文件

( $ES HOME下的 config下的elasticsearch yml)中

原文地址:https://www.cnblogs.com/KdeS/p/12011303.html