Elasticsearch--索引操作

来源:互联网 发布:矩阵函数的导数和积分 编辑:程序博客网 时间:2024/06/11 05:00

前言

Elasticsearch可以支持全文检索,那么ES是以什么机制来支持的,这里索引就是一个重要的步骤,经过索引之后的文档才可以被分析存储、建立倒排索引。

本篇就是以ES的数据检索操作来讨论的。

更多内容情参考:

索引操作

ES索引可以根据指定的index和type进行增加或者更新文档,ID可以指定也可以不指定(index API为我们自动生成)

curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{    "user" : "kimchy",    "post_date" : "2009-11-15T14:12:12",    "message" : "trying out Elasticsearch"}'

这里指定了索引twitter、类型tweet、Id为1
索引操作的结果如下:

{    "_shards" : {        "total" : 10,        "failed" : 0,        "successful" : 10    },    "_index" : "twitter",    "_type" : "tweet",    "_id" : "1",    "_version" : 1,    "created" : true}

上面_shards中描述了分片相关的信息,即当前一共有10个分片(5个主分片,5个副本);
以及index、type、id、version相关信息

  • total:表示现在在使用的分片数量(主分片和副本)
  • successful:操作成功的分片数量
  • failed:操作失败的分片数量

自动创建索引

如果上面索引操作之前,ES中还没有这个索引,那么默认会创建这个索引,并且type类型也会自动创建,也就是说,ES并不需要像传统数据库那样预先定义表的结构。
每个索引都有一个mapping映射,这个映射也是动态生成的,因此当添加新的字段时,会自动的添加mapping映射。
通过在所有节点的配置文件中设置action_create_indexfalse,可以关闭自动索引创建这个功能,默认是打开的
通过在所有节点的配置文件中设置index.mapper.dynamicfalse,可以关闭自动映射创建功能。
通过在所有节点的配置文间中设置action.auto_create_index+aaa*,-bbb*,+ccc*,-*有选择性的创建某些索引。
关闭自动mapping映射功能时,就会引发第一次索引的数据失败,这里我们就要自己手动的put一个映射Elasticsearch-Mapping映射

版本控制

Elasticsearch采用乐观并发控制,当程序并发性比较高的时候,就会产生脏读,所以ES就使用版本号用来避免文档冲突,这里不多过多介绍,分成专门的一篇来介绍ES的版本控制问题Elasticsearch-版本控制

操作类型

ES通过设置一个参数op_type控制索引操作”缺少即加入”,当设置op_type
create时,如果索引时指定的id已经存在,那么索引操作就会失败
上面的op_type=create与直接使用_create API,效果一样:

curl -XPUT 'http://localhost:9200/twitter/tweet/1?op_type=create' -d '{    "user" : "kimchy",    "post_date" : "2009-11-15T14:12:12",    "message" : "trying out Elasticsearch"}'

等价于:

curl -XPUT 'http://localhost:9200/twitter/tweet/1/_create' -d '{    "user" : "kimchy",    "post_date" : "2009-11-15T14:12:12",    "message" : "trying out Elasticsearch"}'

如果使用自动id生成就不存在这个问题了。

自动ID创建:

前面提到创建索引时可以指定ID,也可以不指定ID,如果不指定ID,那么ES会自动的生成一个ID,并且把op_type更改为create
这里需要指出的就是此时HTTP方法将不再是put,更改为POST

 curl -XPOST 'http://localhost:9200/twitter/tweet/' -d '{    "user" : "kimchy",    "post_date" : "2009-11-15T14:12:12",    "message" : "trying out Elasticsearch"}'

返回的结果如下:

{    "_index" : "twitter",    "_type" : "tweet",    "_id" : "6a8ca01c-7896-48e9-81cc-9f70661fcb32",    "_version" : 1,    "created" : true}

路由routing

所有的文档API(get、index、delete、bulk、update、mget)都接收一个routing参数,它用来自定义文档到分片的映射。自定义路由值可以确保所有相关文档都被保存在同一分片上。

shard = hash(routing) % number_of_primary_shards

设置了路由值,就相当于告诉ES文档操作针对的具体分片。

0 0
原创粉丝点击