今天介绍第二个任务——由得到的XML获得索引,将使用到Lucene包。
本文作者:龙鹏
本文前提:已经获得XML文件。
看完本文你将知道:如何建立索引,如何使用索引。
以下是核心代码的截图和说明:
1、解析

首先确立索引所存放的位置

确定分类器和写索引对象

对存取xml文件的to文件夹中每一个xml文件即每一个file对象进行遍历操作

对要获取的一系列内容进行初始化

通过reader对象的read方法读取xml文件,获取document对象,getRootElement方法可以获取document的根节点

即这里的TEI节点

Dom4j有一系列对此document对象进行解析的方法,可以自己去探索

如果懒得看函数,最简单的方法可以一直用element方法,这个可以获取任意一个节点的子节点,可以通过这个方法一步一步获取下面的节点元素

如上述element对象title1author就是analytic节点,title存在analytic节点下的title节点中elementTextTrim可以获取某节点下的某个子节点的内容,即上述代码中title1author.elementTextTrim("title");就是我们要的title,
用这个方法可以获取我们想要的xml中的所有内容(对其解析方法有很多,此处只介绍最容易懂的方法),可以仿照获取author,date,affiliation,address,fulltext,page等
1、写入索引

新建document对象

以title为例介绍如何存储: 第一个参数:域的名称 ,第二个参数:域的内容 ,第三个参数:是否存储

对所有已经获取的内容进行相似的操作

将这些加入document对象中

将document对象加到索引中,即此xml所有内容已经被写入索引

关闭此indexWriter对象
建立的索引如下图:

索引
3、使用索引
下面介绍如何对索引进行查找:自己看注释吧
4的fulltext可以按照自己想查的域进行修改, keyword就是搜索的关键词
5的20是搜索的条数,如果不够只会返回最大的条数 用get方法获取自己之前写入的域的内容

调用输出

结果
回微信公众号给个打赏呗<( ̄︶ ̄)↗[GO!]
网友评论