【发布时间】:2011-02-09 16:28:28
【问题描述】:
我已经到了需要在我的 Lucene.Net 索引中存储一些关于特定字段来自何处的附加数据的地步。具体来说,我想在将字段添加到文档时将 guid 附加到文档的某些字段,并在从搜索结果中获取文档时再次检索它。
这可能吗?
编辑: 好吧,让我通过一个例子来澄清一下。
假设我有一个对象,我希望允许用户使用“个人”、“收藏”、“某些项目”等自定义标签进行标记。我通过在文档中添加多个“标签”字段来做到这一点,如下所示:
doc.Add( new Field( "tag", "personal" ) );
doc.Add( new Field( "tag", "favorite" ) );
问题是我现在需要记录一些关于每个单独标签本身的元数据,特别是表示该标签来自哪里的 guid(想象它是一个用户 ID)。每个标签都可能有不同的 guid,所以我不能简单地创建一个“tag-guid”字段(除非保留值的顺序 --- 请参阅下面的编辑 2)。我不需要对这个元数据进行索引(实际上我不希望它被索引,以避免对元数据的影响),我只需要能够从文档/字段中再次检索它。
doc.GetFields( "tag" )[0].Metadata...
(我在这里编造语法,但我希望我的意思现在很清楚。)
编辑 2: 由于这是一个完全不同的问题,我针对这种方法发布了一个新问题:Is the order of multi-valued fields in Lucene stable?
好的,让我们尝试另一种方法...关键问题区域是同一字段名称下的多个字段值的不确定性(例如“标签”)。如果我可以在这里引入或获得某种确定性,我也许可以将元数据存储在另一个字段中。
例如,如果我可以依赖从不改变的字段值的顺序,我可以使用一组值中的索引来准确识别我指的是哪个标签。
当我稍后检索文档时,是否可以保证将值添加到字段的顺序保持不变?
【问题讨论】:
-
你能把它添加到你的文档中吗:document.Add(new Field("GUID", "guidvalue", Field.Store.YES, Field.Index.NO));
-
@Prescott 问题是我正在为同一个字段添加多个值(例如“标签”),我需要跟踪每个标签的某些来源信息,所以我没有办法添加一个新字段来跟踪它,因为我无法唯一识别它们。
-
@chaiguy 我很难完全理解你的意思——你能举出一个超级简单的例子吗?
-
@chaiguy Prescott 是对的,您可以将多个字段添加到文档中,仅用于存储 - 这是一种常见做法
-
试图在这里澄清:假设以下定义 Document { DocId, Text, Author, CreatedDate }。您是说您还想向各个字段添加其他数据。在这种情况下,假设您想使用 GUID 标记作者,因此为此文档添加一个新字段 AuthorGUID?
标签: lucene metadata lucene.net