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