2.7 实例
前面介绍了如何建立索引,通过映像配置索引,管理索引文件,对文档设置中文分词器以及对文档的其他操作。下面给出一个在Elasticsearch中建立索引文档的相关实例,即对获取的非结构化的学术论文建立基于Elasticsearch的索引。例子中的数据集是从网上下载的PDF格式的学术论文,通过某种工具(如PDFBox)对PDF论文进行解析,得到纯文本形式的文档,经过基于规则的信息抽取,得到论文的题目、作者、作者简介、论文摘要和关键字等信息,并对它们建立索引。限于篇幅,对基于PDFBox的文档解析、基于规则的信息抽取步骤等不再赘述。下面介绍如何建立基于Elasticsearch的索引。
首先,建立一个名为information的索引文档,索引中的指标如Number of Shards和Number of Replicas均采用默认值。
图2.9 创建映像
其次,为information索引文档创建Mapping。在创建传统数据库中的数据表时,一般要逐个创建数据表中的每个字段并指定其数据类型。在Elasticsearch中,虽然它会为拟创建的索引文件自动构建Mapping,但在实际使用时,通常要根据实际情况手动创建Mapping,这样可进行个性化设置(如规定数据类型,以及在某字段上执行各种分词操作等)。图2.9借助Head插件,给出针对此例的手动Mapping结果。从图中可见,在information索引中包括4个字段,对其中的title采用默认分词,对abstract采用基于ansj的分词,而对author和keywords不分词。
创建映像后,可以查看索引文件的任意字段的映像配置信息,如图2.10所示,其中显示的是information中类型文件为share、字段为author的映像配置信息。
图2.10 查看指定field的映像
再次,录入抽取好的论文信息。录入数据时通常使用两种方法:一种是在Head中手动录入数据,如图2.11所示;另一种是通过Java客户端方式自动实现。由于此处尚未涉及Java客户端的相关方法,因此给出第一种方法。图2.12为添加好的相关数据。
图2.11 录入信息
图2.12 存储到Elasticsearch中的信息
把相关信息存储好后,可以对文档进行其他操作,如获取指定的文档信息,获取文档信息中指定字段,删除部分信息,数据更新,批量获取文档等操作。图2.13给出的例子是获取ID为4的文档信息(通过get方法实现)。图2.14为获取文档ID为4的_source下的Title(通过GET方法实现)。图2.15为删除ID为2的文档信息(通过DELETE方法实现),图2.16为基于POST方式批量获取文档信息(通过POST方法实现)。
图2.13 获取指定ID的文档信息
图2.14 获取指定字段Title的信息
图2.15 删除指定ID的文档信息
图2.16 基于POST方式批量获取文档