大数据搜索与日志挖掘及可视化方案:ELK Stack:Elasticsearch、Logstash、Kibana (第2版)
上QQ阅读APP看书,第一时间看更新

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”。