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创建一个文档时,如果指定索引不存在时,则会默认创建一个索引。

    // 创建一个文档ID为1,当 'test' 索引不存在时,则会自动创建一个索引,并添加一个文档
    PUT test/_doc/1
    {
      "text" : "hello word"
    }

    当不需要自动创建索引时,也可以通过设置配置项action.auto_create_index 进行控制,该配置默认为true,可以通过以下三种方式进行设置

    // 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/...

https://www.elastic.co/guide/...

file


GKmai
8 声望0 粉丝