1.3 Elasticsearch索引及其构建
1.3.1 概述
对信息检索过程而言,建立索引是基础的工作。当前的文档索引方法有倒排索引、后缀数组索引、签名文件索引等。Elasticsearch是基于Lucene构建的。它采用倒排索引机制,将文件封装为索引,将文本信息切分成称为Token的信息单元,再利用这些Token构造倒排索引。这里所言的索引并非普通意义上的文档,而是一个可看作不同文档内容的集合。Elasticsearch中的索引类似于数据库,而其中的类型类似于数据表,每个类型由多个字段组成,实际文档的具体内容可分别作为一个字段添加到某个类型中去。在Elasticsearch中设置好的分析器Analyzer的作用下,可以把某些字段的值进行切词分割并得到独立元素。
简单来说,在Elasticsearch中建立索引的简要流程如下:
(1)准备待处理的文档:一般而言,文档准备可以采用JSON格式,也可以使用第三方的工具协助进行处理。本章后续给出的例子就是采用JSON格式来组织的。
(2)将准备好的数据提交文档给Elasticsearch。
(3)完成索引。
(4)返回索引结果。如果启动了Elasticsearch,就可以在前端浏览器中以如下方式来查看其细节信息:
http://ip address:9200/index名称/type名称/文档唯一标识
:上面的例子是GET操作。其中的“index名称”相当于关系型数据库中的数据库名称;“type名称”相当于该数据库中的某个数据表名称;一个index中可以存在多个type。
1.3.2 借助Head工具构建索引
构建索引与检索时,可以利用Elasticsearch自带的Head工具来完成。本节介绍借助Head工具构建索引的方法。
首先,启动Elasticsearch。之后,在浏览器的URL栏中输入如下URL,打开Elasticsearch中的Head工具:
http://ip address:9200/_plugin/head/
其次,单击“New Index”按钮来创建一个新的索引。在弹出的文本框中输入索引名称,如图1.8所示,其中,“Number of Shards”是分片数,对应图1.9所示的5个数据分片(依次为0,1,2,3,4);“Number of Replicas”是数据副本数,在图1.9中带有粗框的分片副本是正在提供数据服务的副本。如果能在Head中看到类似图1.9的结果,则说明成功创建了索引。
图1.8 建立索引
图1.9 建立好的索引
最后,在Head工具的“Any Request[+]”标签下,打开Query选项,如图1.10所示。输入拟提交数据的索引文件名称(这里是指新建立的索引文件,即myfirstindex)以及type(这里是share)、索引文档的唯一标识(即索引的ID号,这里是1)等信息,并选择操作方式(POST、GET、PUT、DELETE等,这里选择POST方法)。接着,在下面的文本输入框中输入拟添加到该索引文件中的具体数据信息,数据以JSON格式表示。需要注意的是,JSON数据格式有严格规定,一般来说,JSON数据的书写格式是“名称”:“值对”。“名称”:“值对”组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开,如图1.10所示。提交后,就会在索引文件myfirstindex的类型文件share中,写入指定的信息。图1.10右侧表示写入成功。
图1.10 向索引文件中添加信息
如何查看索引文件中的数据呢?只需在图1.10的HEAD界面的左侧选择操作类型GET,就可以看到该索引文件的详细信息,如图1.11右侧所示,图1.11右侧部分就是返回的以JSON形式组织的索引文件中的具体数据。
图1.11 查看索引文件中的数据信息
:标准HTTP协议支持6种请求方法:POST、GET、PUT、DELETE、HEAD、OPTIONS。在Elasticsearch的Head中一般只用到前4种,其中,POST向服务器提交数据;GET发送一个请求来取得服务器上的某一资源;PUT和POST都是向服务器发送数据,但PUT通常指定了资源的存放位置,而POST则没有(POST的数据存放位置由服务器自己决定);DELETE用来删除服务器上的某个资源。
1.3.3 Mapping简述
Elasticsearch中的映像Mapping类似于静态语言中的数据类型。但同语言的数据类型相比,映像还有一些其他的含义。Elasticsearch中的映像的作用就是执行一系列的指令,将输入的数据转成可搜索的索引项。映像不仅告诉Elasticsearch一个字段中是什么类型的值,还告诉Elasticsearch如何索引数据以及数据是否能被搜索到。借助于映像,可以很方便地观察到索引中的数据及其属性信息。
在Elasticsearch中使用映像是很容易的,只要在URL后指定某个索引文件名,后面跟_mapping参数即可,如图1.12所示。从图1.12右侧可以清晰地看到索引文件myfirstindex中类型文件share中的各个字段的类型等信息。
图1.12 借助Mapping了解索引文件的相关信息