zoukankan      html  css  js  c++  java
  • elasticsearch实例讲解增删改查

    1、首先弄明白四个概念

    elasticsearch 关系型数据库
    index 数据库
    type
    document
    field 字段

     如果刚一开始理解比较困难,那你就在心中默念100遍,10遍也可以。。。

    如果你做过面向对象开发,我觉得elasticsearch的这四个概念还是很好理解的。

    需要重点说明的是document就是一个json格式的字符串,里面包括N个字段。我们可以想象将面向对象语言里面的一个对象序列化成json字符串。

    关系型数据库需要先建库,再建表。elasticsearch不需要,在你新增的时候会根据你指定的index,type,document,field自动创建。当然先创建索引也是可以的。

    接下来的测试我会这么定义我们的index,type

    index:news

    type:new

    field:title,content。就两个吧,如下:

    {
    "title":"",
    "content":""
    }

    我使用的客户端是kibana。

    2、新增document

    PUT news/new/6
    {
      "title":"title test",
      "conent":"content test"
    }

    结果:

    {
      "_index": "news",
      "_type": "new",
      "_id": "6",
      "_version": 1,
      "result": "created",
      "_shards": {
        "total": 2,
        "successful": 2,
        "failed": 0
      },
      "created": true
    }

    解释下: 

    PUT news/new/6

    这条命令的原型是这样的:

    PUT index/type/id

    PUT命令是http请求的一种方式,如果了解过restful api,对这个命令应该不陌生。除了我们大家熟悉的get,post,还有put,delete,head等。

    news就是我们需要创建的索引,可以理解为数据库

    new就是我们需要创建的type,可以理解为表

    6就是文档的id,可以理解为一条记录的id

    仔细看返回结果,先别看_shards,其它几个字段大家看了之后应该会立马明白。

    _version,是elasticsearch里面用来控制版本冲突的,知道下就行,如果修改或者删除,_version的值都会+1。

    3、修改document

    修改又分为全量修改和部分修改

    全量修改用PUT,部分修改用POST

    全量修改:

    PUT news/new/6
    {
      "title":"title test"
    }

    用查询命令(下面有)查看结果:

    {
      "_index": "news",
      "_type": "new",
      "_id": "6",
      "_version": 2,
      "found": true,
      "_source": {
        "title": "title test"
      }
    }

    纳尼?我的content字段呢?问题就出在这里,如果用全量修改(PUT),就等于是删除之后再新建。

    如果有人说我只想修改title字段怎么办?看下面。

    部分修改

    POST /news/new/6/_update
    {
      "doc":{
        "title":"abcdefg"
      }
    }

    用查询命令(下面有)查看结果:

    {
      "_index": "news",
      "_type": "new",
      "_id": "6",
      "_version": 4,
      "found": true,
      "_source": {
        "title": "abcdefg",
        "content": "content test"
      }
    }

    我在执行POST命令前,把数据恢复了,所以在执行POST命令且只修改title字段后,content还是保留的。且_version变成了4,而不是3。

    4、查询document

    GET /news/new/6

    结果:

    {
      "_index": "news",
      "_type": "new",
      "_id": "6",
      "_version": 4,
      "found": true,
      "_source": {
        "title": "abcdefg",
        "content": "content test"
      }
    }

    5、删除document

    DELETE /news/new/6

    结果:

    {
      "found": true,
      "_index": "news",
      "_type": "new",
      "_id": "6",
      "_version": 5,
      "result": "deleted",
      "_shards": {
        "total": 2,
        "successful": 2,
        "failed": 0
      }
    }

    很简单。简单的增删改查介绍完毕。

    剧透一下,接下来会讲中文分词+全文搜索

  • 相关阅读:
    Django路由控制
    Django杂录
    JQuery
    php-高级计算器
    单项链表
    php解决约瑟夫环
    开灯算法问题
    PHP经典算法之背包问题
    归并排序
    php踩过的那些坑(5)浮点数计算
  • 原文地址:https://www.cnblogs.com/subendong/p/7295549.html
Copyright © 2011-2022 走看看