java - XML 解析器 + 索引数据

标签 java lucene xml-parsing apache-tika apache-commons-digester

我需要用 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>

我只需要提取标签 begin 和 end 内的时间戳,然后索引 p 标签内的文本。目标是查询索引的文本并了解每次命中的时间戳间隙。

例如,如果我查询单词“Text”,输出应该是这样的:“2 hits, 00:11.76-00:16.04, 00:18.52-00:22.88”

我开始使用 Lucene 索引整个 XML。现在我想解析文件,但我不确定解决这个问题的最佳近似值是什么。

欢迎任何帮助或建议:) 谢谢大家!

最佳答案

我使用了 SAX library (即 org.xml.sax.helpers.DefaultHandler 的子类)来解析 XML 文件,从每个 XML 文档中提取所需的信息到我自己的 Document 类中,然后索引该 Document 实例。 (间接是由于必须单独解析多种文档格式,但在同一索引中编制索引。)在您的情况下,如果每个 元素的内容代表一个逻辑文档,您可以存储日期信息作为与特定 token 关联的有效载荷。将 XML 解析到

级别,枚举段落实例,并为每个实例添加一个新的同名 Field 实例,其中值是文本,有效负载是日期信息,适当表示。 (有效负载是二进制的,因此,例如,您可以存储对应于开始时间和结束时间的两个长值。)当您将多个具有相同名称的字段实例添加到文档时,它们会被索引为相同的字段,但是您可以为每个实例分配不同的负载,可以调整文本开始的位置等。

如果您不需要将每个元素的内容作为一个单独的文档,您可以将每个

视为一个单独的文档,然后在其上设置负载。或者,您可以将日期存储为单独的字段。

关于java - XML 解析器 + 索引数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6410993/

相关文章:

java - JSON 读取对象值

java - Solr:如何动态提升有限数量的文档? QueryElevationComponent 是否需要修改?

ios - RestKit ios 相同类型的嵌套对象

java - Android sha512 示例

java - 仅匹配单词中第一个字母的大写字母的正确正则表达式是什么

lucene - Elasticsearch 查询通过通配符过滤出ID

php - 命名空间前缀未定义。如何自动定义它/忽略错误?

java - 通过 id 搜索 xml 元素

Java:对象[]中的NullExceptionPointer

tomcat - Solr Delta-import 什么都不做