【问题标题】:Index XML attributes along with plain text in CLucene索引 XML 属性以及 CLucene 中的纯文本
【发布时间】:2013-02-09 02:46:10
【问题描述】:

我已经能够在 iOS 上编译 CLucene 项目,目前正尝试在我的 iOS 应用程序中使用它。我正在尝试索引 xhtml 文档,并且已经能够通过从这些文档中提取文本节点来做到这一点,然后通过将它们连接在一起来在 lucene 中进行索引,以便一个 xhtml 文档中的所有文本出现在一个单一的Lucene 文档。

但是,我的 xhtml 文档的每个文本节点都有自定义属性,因此当对索引文本进行搜索时,我也应该能够获得与该文本关联的属性。

我的 xml 数据如下所示:

<span data-value="/1/2/3">This is a sample text for this span</span>
<span data-value="/2/3/4">This is a example text for another span</span>
<span data-value="/3/4/5">Searching for this span text</span>

因此,当我从 Lucene 索引中搜索单词样本时,我应该能够检索归因于与单词 Sample 关联的数据值。在上述情况下,它将是 data-value="/1/2/3"。

我创建索引的方式是将数据值属性和文本节点字段连接在一起,然后由 Lucene 对其进行索引。这样,每当我的搜索结果返回时,它也会返回与之一起归属的数据值。我可以评估属性值,并且在搜索时会从显示结果中完全删除该属性。但是,对于包含在跨度文本中的大文本,情况并非如此,其中可能会返回搜索的单词,但数据值属性可能不是搜索结果的一部分,在显示时可以进一步剥离。

但是,我认为这不是索引 XML 属性及其文本数据的最佳方式。

如果有人可以帮助我使用该方法来索引文本与其属性之间的关系,我将不胜感激。

更新:我发现从文本生成的令牌可以具有与之关联的有效负载,所以我在想,如果我们可以将 XML 属性内置为我的整个字符串的有效负载,它可以被视为单个标记(如果我不分析文本)可能对我的目的有用。我想知道是否有人可以帮助我确定这是否适合我的情况。非常感谢您的帮助。

感谢和问候, 阿希什

【问题讨论】:

    标签: xhtml indexing document payload clucene


    【解决方案1】:

    如果您想将所有 XHTML 文本保存为一个 Lucene 文档,那么有效负载可能是可行的方法。

    另一种方法是创建一个文档 ID 字段(例如“documentID:42”和一个表示此 Lucene 文档是连接在一起的整个文档的字段(例如“AllOfDocument:42”)。这样您就可以索引每个文本单独节点并将属性限制为该节点的属性,同时仍将该文本节点绑定到整个文档。使用这种方法,您可以将属性放在文本节点 Lucene 文档中自己的字段中,而不必使用有效负载。可能更简单。

    【讨论】:

    • 感谢您的回复,马克。所以你说的是我应该在一个文档中创建两个不同的字段,其中第一个字段 (documentID:42) 将对应于特定文本节点的属性值,而另一个字段 (AllOfDocument :42),将包含特定的文本节点,因此文本节点与其属性值之间存在 1-1 映射。这样,我将在单个 lucene 文档中拥有与 XHTML 文档中的文本节点一样多的字段。这是否也意味着一个 xhtml 文档等于一个 lucene 文档。
    • 还要确认,当您将所有 XHTML 文本作为一个 lucene 文档时,您的意思是,如果我想索引单个 XHTML 文档中的所有文本节点。那正确吗?如果是,那么是的,我想索引 xhtml 文档中的所有文本,并且每个文本节点都应该绑定到它的属性值。
    • 我原本打算将每个文本节点单独索引为一个 Lucene 文档,同时还将 XHTML 文件中的所有文本节点作为一个单独的 Lucene 文档进行索引,该文档与文本节点 Lucene 文档绑定在一起(因为“ documentID:42" 和 "allOfDocument:42" 的值相同,都是 42。
    • 感谢您的回复,马克。只是想确保我正确理解它。所以你说的是拥有三个不同的文档,其中像 data-value="/1/2/3" 这样的文本节点的每个属性都会进入文档中自己的字段,然后会有另一个文档中只有“这是一个示例......”文本节点的另一个字段,然后另一个文档将只包含包含 (text1 text2 text3) 的整个文本?但是你不认为这会是数据重复吗?另外,我的单词“Sample”的搜索结果也需要突出显示?
    • 是的,您会复制文档。如果您的用例可以处理将 XHTML 文件的所有属性放在一起,您可以为附加到整个 XHTML 文件的 Lucene 文档的每个属性创建一个字段值(并且仅将整个 XHTML 文件索引为 Lucene 文档) - - 但是你失去了属性和单个文本节点之间的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 2019-01-01
    • 2012-08-13
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 2019-04-26
    相关资源
    最近更新 更多