创建索引
这个创建索引指的是手动创建索引,而自动创建索引在索引文档的时候一起看。
最简单的创建索引命令:PUT twitter
;这就创建了一个名称为twitter
的索引。
索引名的命名规则:
- 全部小写
- 不能包含
\, /, *, ?, ", <, >, |,
(space character), ,, #
- 在7.0之前可以使用(:), 7.0之后将不能使用
- 不能以
-, _, +
开头 - 不能是
. or ..
- 不能超过255字节
- 在Kibana中,中文好像不行,可能和浏览器编码有关系,没有验证;用Java rest client中文是可以的。
索引的配置
在创建索引的时候,可以指定索引的配置。
- PUT twitter
- {
- "settings" : {
- "index" : {
- "number_of_shards" : 3,
- "number_of_replicas" : 2
- }
- }
- }
- 在settings中,index那层包裹可以不写,如下:
- PUT twitter
- {
- "settings" : {
- "number_of_shards" : 3,
- "number_of_replicas" : 2
- }
- }
关于Setting的详情。
索引的映射(Mapping)
索引的映射,其实是定义索引的结构,和数据库的表结构道理基本一样。如果对于Lucene的Field有一定理解,这里也就容易理解。
- PUT test
- {
- "settings" : {
- "number_of_shards" : 1
- },
- "mappings" : {
- "_doc" : {
- "properties" : {
- "field1" : { "type" : "text" }
- }
- }
- }
- }
关于Mapping的详情
索引别名(Aliases)
给索引名称,再起一个别名(小名),别名和索引名称不能相同;别名在切换索引源的时候比较有用。
- PUT test
- {
- "aliases" : {
- "alias_1" : {},
- "alias_2" : {
- "filter" : {
- "term" : {"user" : "kimchy" }
- },
- "routing" : "kimchy"
- }
- }
- }
不但可以给索引起别名,还可以给路由起别名等,详见
等待激活的分片(Wait For Active Shards)
默认情况下,在创建索引的时候,只要主分片激活,创建索引的请求就算完成,就会有返回结果。要么就返回超时的结果。返回结果格式如下:
- {
- "acknowledged": true,
- "shards_acknowledged": true,
- "index": "test"
- }
acknowledged
:索引在集群中是否创建成功。shards_acknowledged
:每个分片组激活必要数量的分片,是否超时。
注意:有可能acknowledged
和shards_acknowledged
都为false,但是索引依然创建成功;这两个值,只是简单的表明操作是否超时。如果acknowledged
=false,这说明用新创建的索引更新集群状态超时,但索引可能很快就被创建了。shards_acknowledged
=false;说明激活必要的分片超时,默认只启动主分片。
我们可以通过修改索引设置中的index.write.wait_for_active_shards
,来改变必须激活的分片的数量。这个设置也会影响索引写操作设置中的wait_for_active_shards
;
- PUT test
- {
- "settings": {
- "index.write.wait_for_active_shards": "2"
- }
- }
或者 PUT test?wait_for_active_shards=2
关于wait_for_active_shards
,详见。