我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

Elastic Search分布式搜索引擎,本文说的是索引的文档管理。更通俗的理解的话,就是对应的是关系数据库中的一条条数据。更接近于大家最常操作的数据增删改查操作。理解上也更加容易接受。

苏南大叔:Elastic分布式搜索,如何对文档数据进行增删改查管理? - 文档增删改查
Elastic分布式搜索,如何对文档数据进行增删改查管理?(图12-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。本文测试环境:win10elasticsearch@8.17.1kibana@8.17.1。本文的内容中,都使用kibana执行elasticsearch最原始的接口操作。相比较前一篇文章,本文操作的对象是数据文档。

前文回顾

elastic search的安装及配置,参考文章:

kibana的安装及配置:

elastic search开启集群:

对分片Shards和副本Replicas概念的理解:

elastic search索引表的增删改查操作:

准备索引

本文要操作的索引名是sn_index,建立索引的语句如下:

DELETE /sn_index
PUT /sn_index
{
  "mappings": {
    "properties": {
      "question": {
        "type": "text"
      },
      "answer": {
        "type": "text"
      },
      "point":{
        "type": "integer"
      }
    }
  }
}
重点就是最后一个成员后面的逗号,不能存在。

苏南大叔:Elastic分布式搜索,如何对文档数据进行增删改查管理? - 建索引语句
Elastic分布式搜索,如何对文档数据进行增删改查管理?(图12-2)

添加新文档

指定id的话,则添加或修改同一个文档,并且修改_version

POST /sn_index/_doc/1
{
  "question": "苏南大叔是谁?",
  "answer": "秘密",
  "coin": 5
}

苏南大叔:Elastic分布式搜索,如何对文档数据进行增删改查管理? - 添加或修改文档
Elastic分布式搜索,如何对文档数据进行增删改查管理?(图12-3)

不指定id的话,则不断添加新的随机id文档。

POST /sn_index/_doc
{
  "question": "苏南大叔是谁?",
  "answer": "秘密",
  "coin": 5
}

苏南大叔:Elastic分布式搜索,如何对文档数据进行增删改查管理? - 添加id随机文档
Elastic分布式搜索,如何对文档数据进行增删改查管理?(图12-4)

修改文档

修改文档和新增文档差不多,指定好文档的id后,指明操作为_update即可。

POST /sn_index/_update/1
{
    "doc": {
        "answer": "这是个秘密",
        "coin":10 
    }
}

苏南大叔:Elastic分布式搜索,如何对文档数据进行增删改查管理? - 修改文档
Elastic分布式搜索,如何对文档数据进行增删改查管理?(图12-5)

删除文档

DELETE /sn_index/_doc/1

苏南大叔:Elastic分布式搜索,如何对文档数据进行增删改查管理? - 删除文档
Elastic分布式搜索,如何对文档数据进行增删改查管理?(图12-6)

查询文档

这个查询部分非常复杂,不是一天两天能讲清楚的事情。这里,先做简单的查询。

GET /sn_index/_doc/1

苏南大叔:Elastic分布式搜索,如何对文档数据进行增删改查管理? - 查询文档按id
Elastic分布式搜索,如何对文档数据进行增删改查管理?(图12-7)

模糊匹配

POST /sn_index/_search
{
  "query": {
    "match": {
      "question": "大叔"
    }
  }
}

苏南大叔:Elastic分布式搜索,如何对文档数据进行增删改查管理? - 模糊查询
Elastic分布式搜索,如何对文档数据进行增删改查管理?(图12-8)

这里有待再次考证确认,待续。

and查询

POST /sn_index/_search
{
   "query": {
    "bool": {
      "must": [
        { "match": { "question": "大叔" }},
        { "match": { "answer": "秘密" }}
      ]
    }
  }
}

苏南大叔:Elastic分布式搜索,如何对文档数据进行增删改查管理? - 查询and
Elastic分布式搜索,如何对文档数据进行增删改查管理?(图12-9)

or查询

POST /sn_index/_search
{
   "query": {
    "bool": {
      "should": [
        { "match": { "question": "大叔" }},
        { "match": { "answer": "秘密" }}
      ]
    }
  }
}

苏南大叔:Elastic分布式搜索,如何对文档数据进行增删改查管理? - or操作
Elastic分布式搜索,如何对文档数据进行增删改查管理?(图12-10)

not查询

POST /sn_index/_search
{
   "query": {
    "bool": {
      "must_not": [
        { "match": { "question": "大叔" }},
        { "match": { "answer": "秘密" }}
      ]
    }
  }
}

苏南大叔:Elastic分布式搜索,如何对文档数据进行增删改查管理? - mustnot
Elastic分布式搜索,如何对文档数据进行增删改查管理?(图12-11)

范围查询

POST /sn_index/_search
{
  "query": {
    "range": {
      "coin": {
        "gt": 3
      }
    }
  }
}

苏南大叔:Elastic分布式搜索,如何对文档数据进行增删改查管理? - 大于操作查询
Elastic分布式搜索,如何对文档数据进行增删改查管理?(图12-12)

结语

本文只能算是基础的增删改查,可以看到:
elastic的查询(_search)功能,实在是很难用很难写,很难理解,编程效率不咋地。所以,后续官方又出品了其它的查询方式。这里做伏笔,后续再讲述。

更多elastic经验文章,请点击苏南大叔的博客文章:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   elastic