ES序列 | Index API分析

ES序列 | Index API分析

  1. POST&PUT 创建索引区别
  2. 自动索引创建设置
  3. 指定创建行为
  4. 指定文档路由(Routing)
  • POST&PUT 创建索引区别
    在HTTP中,PUT语意是代表具有幂等性操作(多次执行都能得到同样的结果)
    而且POST则是非幂等,在资源创建时候,执行多次会产生不同的结果
    在ES中,使用PUT需要在当前操作索引下指定一个文档ID, 当文档ID不存在时,会进行创建一个文档,如果存在的话,则进行更新,所以在ES里,PUT是具有幂等性,多次执行都能得到同样的结果
    PUT test/_doc/1
    {
      "text" : "hello word"
    }

而如果使用POST创建一个文档,是不需要在当前操作索引下进行指定文档ID(不指定文档ID时,ES则会自动生成一个文档ID),当创建文档不指定文档ID时,当前操作是非幂等,多次执行后,会创建多个文档。

     # 创建一个文档,执行多次会创建多个文档
     POST test/_doc
     {
        "text" : "hello word!"
     }
     # 当指定的文档ID存在,则进行更新,不存在则进行新增
     POST test/_doc/1
     {
        "text" : "hello word!"
     }


  • 自动索引创建设置
    ES使用Index API创建一个文档时,如果指定索引不存在时,则会默认创建一个索引。
    ```java
    // 创建一个文档ID为1,当 'test' 索引不存在时,则会自动创建一个索引,并添加一个文档
    PUT test/_doc/1
    {
      "text" : "hello word"
    }
    ```
    当不需要自动创建索引时,也可以通过设置配置项`action.auto_create_index` 进行控制,该配置默认为`true`,可以通过以下三种方式进行设置
    ```java
    // 1:指定自动创建索引规则: 通过在前面加上`-`,` ` 标明禁止和允许自动创建索引
    // 支持设置多个索引创建的匹配规则,多个用逗号隔开
    PUT _cluster/settings
   {
       "persistent": {
           "action.auto_create_index": "twitter,index10,-index1*, ind*" 
        }
   }
    // 2:设置该配置为false则会禁止索引自动创建
    PUT _cluster/settings
    {
        "persistent": {
            "action.auto_create_index": "false" 
        }
    }
    // 3: 设置为true,则允许索引自动创建,该配置默认为true
    PUT _cluster/settings
    {
        "persistent": {
            "action.auto_create_index": "true" 
        }
    }   
    ```
  • 指定创建行为
    索引操作还可以通过设置`op_type`用于强制执行创建操作,从而实现`不存在即添加`
    // 当ID为1的文档不存在时,则创建,如果存在则报错
    PUT test/_doc/1?op_type=create
   {
        "text" : "hello word"
   }
    // `_create` uri 也是一样的效果
   PUT test/_create/1
  {
        "text" : "hello word"
  }


  • 指定文档路由(Routing)
    文档创建时,ES会通过公式`shard_num = hash(_routing) % num_primary_shards
`将文档分配到索引对应的分片,而`_routing`的默认值为`文档ID`,也可以在创建文档时进行指定该文档的路由
   PUT test/_doc?routing=kimchy
   {
      "text" : "hello word"
   }

指定文档路由可以提高搜索效率,因为无需将搜索请求散发到索引中的所有分片,而是可以直接将请求仅发送到指定的路由值的分片进行搜索数据。

    
>  参考文档
> 
>  https://www.elastic.co/guide/en/elasticsearch/reference/7.1/docs-index_.html
>
>  https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-routing-field.html

ES序列 | Index API分析_第1张图片


`

你可能感兴趣的:(ES序列 | Index API分析)