2.2 建立索引
在Elasticsearch中,可以通过Index API来对文档进行索引操作。在建立索引文件时,可以设置分布式索引文件的Shards数量和Replicas数量,如可通过使用{index} / _settings (指定Index名称的配置)子句,修改索引文件的配置。
代码段2.1实现了对名为myweibo2的索引文件的创建工作(注意是通过PUT方式向系统提交索引请求),方法中指定了索引数据的shards数量和replicas数量(如果不指定它们,系统会采用默认值)。注意,这里的参数-d后面是提交的数据。
//代码段2.1: 使用JSON数据格式来创建索引。执行后会新建一个名为myweibo2的新的索引文件
curl -XPUT 'http://localhost:9200/myweibo2/' -d '{
"settings": {
"index": {
"number_of_shards": 5,
"number_of_replicas": 1
}
}
}'
也可以采用_settings子句实现其他相应功能。下面的代码段2.2修改myweibo1索引文件,并将其replicas副本量改为指定的数据,图2.2显示该索引的副本已变成设定的数值了。
//代码段2.2: 使用_settings子句修改索引文件
curl -XPUT 'localhost:9200/myweibo1/_settings' -d '
{
"index": {
"number_of_replicas": 7
}
}'
图2.2 索引文件属性信息
:上述语句中写number_of_replicas参数的地方也可换成如下参数:
●number_of_replicas——设置当前索引的副本数量。
●blocks.read_only——如设为true,则当前索引只允许读,不允许写或更新。
●blocks.read——如设为true,则禁止读取操作。
●blocks.write——如设为true,则禁止写操作。
●blocks.metadata——如设为true,则禁止对metadata操作。
对于{index}/_settings子句,如果选择的HTTP操作类型是GET(见下述语句),则可以获取当前索引文件weibo的较为详细的配置信息。
curl -XGET 'http://localhost:9200/weibo/_settings'
返回值如下:
{ "weibo": { "settings": { "index": { "uuid": "Z3_EcCZHRb255LdLHol1ww", "number_of_replicas": "2", "number_of_shards": "5", "version": { "created": "1000099" } } } } }
类似地,采用如下的类似语句,可以一次性获得多个索引文件(例子是返回weibo、weibo2这两个索引文件)的配置信息:
curl -XGET 'http://localhost:9200/weibo, weibo2/_settings'
还可以使用_all参数来获取所有索引的配置信息:
curl -XGET 'http://localhost:9200/_all/_settings'
也可以使用通配符来获取一批索引的配置参数,语句如下所示:
curl -XGET 'http://localhost:9200/.marvel*/_settings
另外,也可通过指定JSON格式的数据来向指定的索引文件中插入数据,并建立相应的索引。代码段2.3新建了一个索引(名为myweibo3)及其type文件(名为example),并向其中写入指定JSON格式的字段信息(这些Fields包括user、post_date、mymessage等)。执行完毕后的结果如图2.3所示。
//代码段2.3: 指定JSON格式的数据来向指定的Index文件中插入数据,自动生成ID号
curl -XPUT 'http://localhost:9200/myweibo3/example/_create -d '{
"user": "Alan",
"post_date": "2014-11-26T08:00:00",
"mymessage": "this is an example on operation type on create"
}'
图2.3 向新建的索引文件中插入指定的信息
:Elasticsearch的内置字段主要有_uid、_ID、_type、_source、_all、_analyzer、_boost、_parent、_routing、_index、_size、_timestamp、_ttl等,字段类型主要有String、Integer/long、Float/double、Boolean、Null、Date等。在图2.3中已经看到了_index、_type、_ID、_score这几个内置字段(单词本身所表示的含义此处不再赘述)。图中显示的其他字段(即user、post_date、memessage)是用户以JSON格式自定义的字段。
代码段2.4是向刚才新建立的索引文件myweibo3的类型文件example中添加文档的语句。这个文档共有3个字段,它们分别是user、post_date、mymessage。和前述语句不同的是,在URL最后的参数3是指定了这个新插入的Document的ID号。该语句的执行结果如图2.4所示。
//代码段2.4: 指定新插入索引数据的ID号
curl -XPUT 'http://localhost:9200/myweibo3/example/3' -d '{
"user": "LiMing",
"post_date": "2014-11-24T14:12:12",
"message": "Hello Tom"
}'
图2.4 向指定的索引文件中插入指定内容的信息
:上面例子中指定了这个Document的ID为3,但是也可以不指定ID。这样,Elasticsearch会自动生成一个ID号并在结果中返回。
在建立索引文件后,可以通过语句获取指定索引文件的状态信息,如curl-XGET' localhost:9200/indexfile/_stats',注意这里使用了/_stats参数。图2.5给出查询索引文件返回的状态信息。
图2.5 查询索引文件状态信息
在图2.5返回的对象中,可以看到几个对象:primaries(包含当前节点之上的所有主分片的信息)、total(包含所有分片及副本的信息)。另外,所有这些对象都包含如下对象:
●docs——显示被索引文档的信息,其中的count值表示所描述的索引中的文档数量。
●store——反映索引的大小,以及throttling信息等。
●indexing——索引操作信息。
●get——实时获取操作信息。
●search——搜索操作信息。
:也可以同时给出多个索引的统计信息,如“/索引1,索引2,索引3/_stats”。