在CLucene中为XML属性和纯文本建立索引



我已经能够在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索引中搜索单词样本时,我应该能够检索与单词样本相关联的数据值。在上述情况下,它将是数据值="/1/2/3"。

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

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

如果有人能帮助我使用这种方法来索引文本及其属性之间的关系,我将不胜感激。

更新:我发现从文本生成的令牌可以有与之相关的有效负载,所以我认为,如果我们可以将XML属性内置为我的整个字符串的有效负载(可以将其视为单个令牌)(如果我不分析文本),这对我的目的可能很有用。我想知道是否有人能帮我弄清楚这是否是我案件的正确方法。非常感谢你的帮助。

谢谢&当做Asheesh

如果您想将所有XHTML文本保留为一个Lucene文档,那么有效负载可能是最好的选择。

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

最新更新