2.8 实例
前面给出了如何建立索引、通过映像mappings配置索引和管理索引文件、对文档设置分析器以及对文档的其他操作方法。下面给出一个在Elasticsearch中建立索引文档的相关实例,即对获取的非结构化的学术论文数据建立基于Elasticsearch的索引的方法。例子中的数据集是从网上下载的PDF格式的学术论文,通过某种工具(如PDFBox)对论文进行解析,得到纯文本形式的文档。经过基于规则的信息抽取,得到论文的题目、作者、作者简介、论文摘要和关键字等信息,并对它们建立索引。限于篇幅,对基于PDFBox的文档解析、基于规则的信息抽取步骤等不再赘述,下面介绍如何建立基于Elasticsearch的索引。
首先,建立一个名为information的索引文档,索引文件中的性能指标如numberof shards和numberofreplicas均采用默认值。
其次,为information索引文档创建映像mappings。在创建传统的关系型数据库中的数据表时,一般要逐个创建数据表中的每个字段并指定其数据类型。在Elasticsearch中,虽然它会为拟创建的索引文件自动构建mappings,但在实际使用时,通常要根据实际情况手动创建mappings,这样可方便进行个性化设置(如规定数据类型、在某字段上执行各种分词操作等)。图2.13是借助head工具,给出针对此例的手动配置创建mappings的结果。从中可见,在information索引中包括4个字段,这里对abstract和keywords采用ik_max_word分析器。
图2.13 创建mappings
Tips:在Elasticsearch升级到5.0.0版本之后,IK分词工具移除了名为ik的analyzer和tokenizer。在Elasticsearch5.x及后续版本中,应使用ik_smart或ik_max_word作为IK分词工具的名称。其中ik_smart会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国/国歌”;而ik_max_word会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国/中华人民/中华/华人/人民共和国/人民/人/民/共和国/共和/和/国国/国歌”。
创建映像mappings后,可查看索引文件中任意字段的映像配置信息。图2.14显示的是information中类型文件为share、字段为author的映像配置信息。
图2.14 查看指定field的mappings
最后,录入抽取好的论文信息。录入数据时可使用两种方法:一种是在head中手动录入数据(如图2.15所示);另一种是通过Java客户端方式自动实现。由于此处尚未涉及Java客户端的相关方法,这里给出第一种方法。图2.16为添加好的相关数据。
图2.15 录入信息
图2.16 存储到Elasticsearch中的信息
当把相关信息存储后,可以对文档进行相关操作(如获取指定的文档信息,获取文档信息中指定字段,删除部分信息,数据更新,批量获取文档等)。图2.17给出的例子是获取id为3的文档信息(通过HTTP的GET方法实现);图2.18为获取文档id为1的_source下的Title的信息(通过HTTP的GET方法实现);图2.19为删除id为2的文档信息(通过HTTP的DELETE方法实现);图2.20为基于POST方式批量获取文档信息(通过HTTP的POST方法实现)。
图2.17 获取指定id的文档信息
图2.18 获取指定字段Title的信息
图2.19 删除指定id的文档信息
图2.20 基于POST方式批量获取文档信息