Lucene如何满足我的需求?

时间:2013-08-09 13:03:02

标签: lucene

我有一个包含多个文档的巨大XML文件(如果需要,可以轻松地将每个文档转换为多个文件)。这个巨大的XML的文件大小约为4 GB。我需要对其进行索引,以便更好,更快地搜索用户。我也在使用XSLT来转换这些数据。

以下是我的基本XML结构 -

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

如果需要,每个Doc可以分开。如果用户搜索了特定的单词,我将使用XSLT以HTML格式显示完整的文档。

由于我到目前为止还没有使用过Lucene,所以我有一些疑问 -

  1. 我是否必须保留XML文件和Lucene Index文件?
  2. 如果只是稍后一个,那么它是否可以通过XSLT进行转换?

2 个答案:

答案 0 :(得分:0)

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

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

你可以有一个函数来添加/删除索引中的东西,以保存重复处理整个XML文件的“昂贵”任务。

将数据编入索引后,您可以向Lucene提供查询。

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

-

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

实际上,我做了类似的事情,分析了存储在数据库中的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/

答案 1 :(得分:0)

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

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