zoukankan      html  css  js  c++  java
  • 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)中

  • 相关阅读:
    JXOI2018简要题解
    TJOI2018简要题解
    BJOI2018简要题解
    【题解】Luogu P4091 [HEOI2016/TJOI2016]求和
    【题解】Luogu P5301 [GXOI/GZOI2019]宝牌一大堆
    【题解】Luogu P5291 [十二省联考2019]希望
    【题解】Luogu P3349 [ZJOI2016]小星星
    【题解】Luogu P5327 [ZJOI2019]语言
    【题解】Luogu P5319 [BJOI2019]奥术神杖
    【题解】Luogu P5471 [NOI2019]弹跳
  • 原文地址:https://www.cnblogs.com/KdeS/p/12011303.html
Copyright © 2011-2022 走看看