Elasticsearch学习笔记(三):ES的集群检查,文档CRUD

一. Document的数据格式

         ES是面向文档的分析搜索引擎

            (1)应用系统的数据结构基本上都是面向对象的。

            (2)对象数据存储到数据库当中,只能拆解开来,变为扁平的多张表,每次查询的时候还需要还原为对象格式,相当麻烦。

            (3)ES是面向文档的,文档中存储的数据结构,与面向对象的数据结构是一样的,基于这种文档数据结构,es可以提供复杂的索引,全文检索,分析聚合等功能。

            (4)ES的document是用json数据格式来表达。


二.基于电商数据做ES的CRUD操作。

             前提:安装并启动es.使用kibana工具做相关操作,本次操作以及后续都基于ES5。

             es提供了一套cat api,可以帮助我们es中的相关数据

             (1)快速查看集群的健康状况? yellow,green,red?

               GET _cat/health?v

epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1560233646 14:14:06  elasticsearch yellow          1         1      1   1    0    0        1             0                  -                 50.0%

            es的状态有下面三个:

                 green:每个索引的primary shard 和 replica shard 都是active状态。

                 yellow:每个索引的primary shard都是active状态,但是部分replica shard不是active状态,处于不可用的状态。

                 red:不是所有的primary shard都是active状态,部分索引有数据丢失了。

              这里因为只启动了一个es进程,也就是一个node,现在es当中只有一个index,是kibana自己内置建立的index。默认的配置是一个index分配5个primary shard 和 5 个 replica shard。这里只有kibana内置的一个index启动了。而primary shard 和 replica shard是不够的在同一台机器上的(为了容错)。所以此时是yellow状态。此时只要再启动第二个es进程,状态就会变成green了。

            (2)快速查看集群中有哪些索引

              GET _cat/indices?v

health status index   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   .kibana dbYTE7RTScupaV8INtITYQ   1   1          1            0      3.1kb          3.1kb

            (3)简单的索引操作

 创建索引:put /索引名

             例:put /test_index?pretty

 删除索引:delete /索引名

             例:delete /test_index?pretty

          (4)商品的CRUD

              1. 新增商品,创建文档,建立索引 格式: put /index/type/id { json 数据}

例:

put /ecommerce/produce/1
{
  "name": "gaolujie yaogao",
  "desc": "gaoxiao meibai",
  "price": 30,
  "producer": "gaolujie producer",
  "tags": ["meibai", "fangzhu"]
}

es会自动创建index和type,不用我们去提前创建好,而且es会默认对document的每个field字段建立倒排索引,让其可以被搜索。

             2. 查询商品:检索文档    格式: get /index/type/id

例:GET /ecommerce/product/3

{
  "_index": "ecommerce",
  "_type": "product",
  "_id": "3",
  "_version": 1,
  "found": true,
  "_source": {
    "name": "zhonghua yagao",
    "desc": "caoben zhiwu",
    "price": 40,
    "producer": "zhonghua producer",
    "tags": [
      "qingxin"
    ]
  }
}

        3.  替换文档

PUT /ecommerce/product/1
{
    "name" : "jiaqiangban gaolujie yagao",
    "desc" :  "gaoxiao meibai",
    "price" :  30,
    "producer" :      "gaolujie producer",
    "tags": [ "meibai", "fangzhu" ]
}

get /ecommerce/product/1

{
  "_index": "ecommerce",
  "_type": "product",
  "_id": "1",
  "_version": 2,
  "found": true,
  "_source": {
    "name": "jiaqiangban gaolujie yagao",
    "desc": "gaoxiao meibai",
    "price": 30,
    "producer": "gaolujie producer",
    "tags": [
      "meibai",
      "fangzhu"
    ]
  }
}

替换方式的麻烦之处在于每次替换都要带上所有的field,才能去正确的进行信息修改。

那怎么进行只更新部分字段的操作?

POST /ecommerce/product/1/_update
{
  "doc": {
    "name": "chaojiban gaolujie yaogao"
  }
}

result:
{
  "_index": "ecommerce",
  "_type": "product",
  "_id": "1",
  "_version": 3,
  "result": "updated",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  }
}

GET /ecommerce/product/1
{
  "_index": "ecommerce",
  "_type": "product",
  "_id": "1",
  "_version": 3,
  "found": true,
  "_source": {
    "name": "chaojiban gaolujie yaogao",
    "desc": "gaoxiao meibai",
    "price": 30,
    "producer": "gaolujie producer",
    "tags": [
      "meibai",
      "fangzhu"
    ]
  }
}

4. 删除文档

   格式: delete /index/type/id

DELETE /ecommerce/product/1

你可能感兴趣的:(Elasticsearch)