- 大数据搜索与挖掘及可视化管理方案 :Elastic Stack 5:Elasticsearch、Logstash、Kibana、X-Pack、Beats (第3版)
- 高莘
- 1607字
- 2020-11-28 15:51:57
2.3 建立索引
在Elasticsearch中,可通过Index API来对文档进行索引操作。在建立索引文件时,可以设置分布式索引文件的shards数量和replicas数量,如可通过使用{index}/_settings(指定index名称的配置)子句,修改索引文件的配置。
Tips:在执行下面的代码时,可以使用终端中的curl命令,即下面的示例代码(以Ubuntu系统为例,安装curl需使用终端命令sudo apt install curl);也可以使用Elasticsearch的Web前端。后者界面中提供了“复合查询”标签页,其中的“查询”窗口有三行输入框:第一行填写Elasticsearch在9200端口的URL地址(如localhost:9200);第二行填写与索引相关的信息(可参照下面的示例代码);第三行填写JSON格式的查询代码。此外,ElasticStack官方推出的Kibana也提供了Dev Tools,专用于执行此类代码,其书写格式与Elastic官网一致。有关Kibana及其Dev Tools中代码书写格式的相关内容,将在本书第7章进行介绍。
下面的代码段2.1实现了对名为myweibo1的索引文件的创建工作(注意是通过XPUT方式向系统提交索引请求),方法中指定了索引数据的shards数量和replicas数量(如果不指定它们,系统会采用默认值)。注意这里的参数-d后面是拟提交的索引数据。
//代码段2.1:使用JSON数据格式来创建索引。执行后会新建一个名为myweibo1的新的索引文件 curl-XPUT'http://localhost:9200/myweibo1/'-d'{ "settings": { "index": { "number_of_shards":5, "number_of_replicas":1 } } }'
也可以采用_settings子句实现其他相应功能。代码段2.2修改myweibo1索引文件并将其replicas副本数量改为指定数据,图2.6显示该索引的副本已变成设定的数值了。
//代码段2.2:修改索引文件 curl-XPUT'localhost:9200/myweibo1/_settings'-d'{ "index": { "number_of_replicas":7 } }'
Tips:上述语句中的“number_of_replicas”参数是设置当前索引的副本数量,它也可换成如下其他参数:
· blocks.read_only:如设为true,则当前索引只允许读,不允许写或更新。
· blocks.read:如设为true,则禁止读取操作。
· blocks.write:如设为true,则禁止写操作。
· blocks.metadata:如设为true,则禁止对metadata操作。
图2.6 索引文件属性信息
对于{index}/_settings子句,如果选择的HTTP操作类型是GET(见下述语句XGET),则可以获取当前索引文件的较为详细的配置信息。
curl-XGET'http://localhost:9200/myweibo1/_settings'
返回值如下:
{ "myweibo1":{ "settings":{ "index":{ "creation_date":"1477817288259", "number_of_shards":"5", "number_of_replicas":"7", "uuid":"LdVP6QRoRXiLDb2fBa7nFA", "version":{ "created":"5000099" }, "provided_name":"myweibo1" } } } }
采用如下的类似语句,可一次性获得多个索引文件(例子是返回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.7所示。
//代码段2.3:指定 JSON格式的数据来向指定的 index文件中插入数据自动生成 id号 curl- XPUT'http://localhost:9200/myweibo3/example/_create'- d'{ "user": "Alan", "post_date": "2016-10-30T08:00:00", "mymessage": "this is an example on operation type on create" }'
图2.7 向新建的索引文件中插入指定的信息
Tips:Elasticsearch的内置字段主要有_all、_field_names、_id、_index、_meta、_parent、_routing、_source、_type、_uid等;字段类型主要有text/keyword、integer/long、float/double、boolean、date等。在图2.7中已经看到了_index、_type、_id等内置字段(其含义不再赘述)。图中显示的其他字段(即user、post_date、memessage)是用户以JSON格式自定义的字段。
代码段2.4是向新建立的索引文件myweibo3的类型文件example中添加文档的语句,这个文档共有三个字段(分别是user、post_date、mymessage)。和前述语句不同的是,在URL最后的参数“3”是指定了这个新插入的document的id号。该语句的执行结果如图2.8所示。
//代码段2.4:指定新插入索引数据的 id号 curl-XPUT'http://localhost:9200/myweibo3/example/3'-d'{ "user": "LiMing", "post_date": "2016-10-30T14:00:00", "mymessage": "Hello Tom" }'
图2.8 向指定的索引文件中插入指定内容的信息
Tips:上面例子中指定了这个document的id为3,但是也可以不指定id,此时Elasticsearch会自动生成一个id号并在结果中返回。
在建立索引文件后,可以通过在终端中输入命令来获取指定索引文件的状态信息,如curllocalhost:9200/{index}/_stats,注意这里使用了/_stats参数。图2.9给出查询索引文件返回的状态信息。
图2.9 查询索引文件状态信息
在返回的结果中可以看到多个对象。其中primaries是包含当前节点之上的所有主分片的信息;total是包含所有分片及副本的信息;indices是包含当前操作的索引文件的信息。另外,所有这些对象都包含如下对象:
· docs:显示被索引文档的信息,其中的count值表示所描述的索引中的文档数量。
· store:反映索引的大小以及throttling信息等。
·indexing:索引操作信息。
· get:实时获取操作信息。
· search:搜索操作信息。
Tips:查询时也可以同时给出多个索引的统计信息,如“/索引1,索引2,索引3/_stats”。