我需要使用Lucene索引一些xml文档,但在此之前,我需要解析这些XML并在其标记内提取一些信息。
XML看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<tt xml:lang="es" xmlns="http://www.w3.org/2006/04/ttaf1" xmlns:tts="http://www.w3.org/2006/04/ttaf1#styling">
<head>
<styling>
<style id="bl" tts:fontWeight="bold" tts:color="#FFFFFF" tts:fontSize="15" tts:fontFamily="sansSerif"/>
</styling>
</head>
<body>
<div xml:lang="es">
<p begin="00:00.50" end="00:04.02" style="bl">Info</p>
<p begin="00:04.32" end="00:07.68" style="bl">Different words,<br />and phrases to index</p>
<p begin="00:11.76" end="00:16.04" style="bl">Text</p>
<p begin="00:18.52" end="00:22.88" style="bl">More and<br />more text</p>
</div>
</body>
</tt>
我只需要提取标签开始和结束内的时间戳,然后索引p标签内的文本。目标是查询索引的文本,并知道每个时间戳间隔都被命中。
例如,如果我查询单词“Text”,输出应该是这样的:“2次点击,00:11.76-00:16.04,00:18.52-00:22.88”
我开始使用Lucene索引整个XML。现在我想解析文件,但我不确定什么是解决这个问题的最佳近似值。
欢迎任何帮助或建议:) 谢谢大家!
答案 0 :(得分:3)
我强烈建议将所有XML存储在eXist数据库中,该数据库具有Lucene built-in。我已经使用这个组合几个月了,它很容易解决很多搜索和检索问题。
答案 1 :(得分:3)
我使用SAX library(即org.xml.sax.helpers.DefaultHandler的子类)来解析XML文件,从每个XML文档中将所需信息提取到我自己的Document类中,然后将其编入索引文档实例。 (间接是由于有多个文档格式必须单独解析,但索引在同一索引中。)在您的情况下,如果您的每个&lt; body&gt;的内容。 elements表示逻辑文档,您可以将日期信息存储为与特定标记关联的有效负载。将XML解析为&lt; p&gt; level,枚举段落实例,并为每个实例添加一个具有相同名称的新Field实例,其中值为文本,有效负载是适当表示的日期信息。 (有效负载是二进制的,因此,例如,您可以存储对应于开始和结束时间的两个长值。)当您向文档添加多个具有相同名称的字段实例时,它们会被索引为相同的字段,但是您可以为每个实例分配不同的有效负载,您可以调整文本开头的位置等。
如果您不需要将每个元素的内容作为单个文档,则可以将每个元素视为&lt; p&gt;作为单独的文档,然后在其上设置有效负载。或者,您可以将日期存储为单独的字段。