0

I am having a huge XML file with multiple documents in it (This can be easily converted to multiple files per document, if required). The file size of this huge XML is around 4 GB. I need to index it for better and faster search for the users. Also I am using XSLT to transform this data.

Below is my basic XML structure-

<Docs>
  <Doc>
    <Title t=""></Title>
    <Desc></Desc>
    <Info></Info>
  </Doc>
  <Doc>
    <Title t=""></Title>
    <Desc></Desc>
    <Info></Info>
  </Doc>
</Docs>

Each Doc can be separated, if required. If the user searched for specific word(s), I will be displaying the complete document in HTML format using XSLT.

As I have not used Lucene so far, I have certains questions -

  1. Will I have to keep both XML file and Lucene Index file?
  2. If only later one, then, will it be transformable through XSLT?
4

2 回答 2

0

我想说不要在 Lucene 索引中保存原始 XML。将 XML 标记和属性的值保存为 Lucene 文档的字段。
您可以将生成的 HTML(XSLT 转换的输出)的路径保存为Lucene 中的Doc的一部分作为字段。这是在索引之前/之后完成的。

因此,当您找到一个文档时,您不必在运行时构建 HTML 视图。您将只使用正确 HTML 表示的路径。

于 2013-08-09T14:22:09.250 回答
0

根据我的经验,您会将 XML 文件保存在磁盘上。

然后在应用程序启动时,您将处理该文件以创建一个 Lucene 索引。

您可以有一个从索引中添加/删除内容的功能,以节省在更改时重新处理整个 XML 文件的“昂贵”任务。

一旦你的数据被索引,你就可以给 Lucene 一个查询。

返回的结果可能是 XML,然后您可以使用 XSLT 处理视图。

-

以上是非常高的水平,'是'你可以回答。

实际上,我做过类似的事情,其中​​存储在数据库中的 Umbraco 内容被分析,然后填充到 Lucene 索引中(添加额外的字段以使搜索更容易)。

然后我们编写了一个 XSLT 扩展,它允许将 RAW lucene 查询传递给一些 C#,然后将结果集作为内存中的 XML 返回。

<xsl:apply-templates select="$result-set/result" />

<xsl:template match="result">
<article>
  <h1><xsl:value-of select="title" /></h1>
</article>
</xsl:template>

这篇文章中有一些很棒的想法。http://www.ibm.com/developerworks/java/library/j-lucene/

于 2013-08-09T14:13:30.177 回答