是否可以将自定义元数据添加到 Lucene 字段?

2024-02-08

我已经到了需要存储一些有关 Lucene.Net 索引中特定字段来自何处的附加数据的地步。具体来说,我想在将字段添加到文档时将 guid 附加到文档的某些字段,并在从搜索结果中获取文档时再次检索它。

这可能吗?

Edit:好吧,让我举个例子来澄清一下。

假设我有一个对象,我希望允许用户使用自定义标签(如“个人”、“最喜欢的”、“某些项目”)进行标记。我通过向文档添加多个“标签”字段来实现此目的,如下所示:

doc.Add( new Field( "tag", "personal" ) );
doc.Add( new Field( "tag", "favorite" ) );

问题是我现在需要记录有关每个单独标签本身的一些元数据,特别是代表该标签来自何处的 guid(将其想象为用户 ID)。每个标签可能有不同的 guid,所以我不能简单地创建一个“tag-guid”字段(unless值的顺序被保留——请参阅下面的编辑 2)。我不需要为这些元数据建立索引(事实上,我不希望这样做,以避免元数据被命中),我只需要能够从文档/字段中再次检索它。

doc.GetFields( "tag" )[0].Metadata...

(我在这里编写语法,但我希望我的观点现在已经清楚了。)

Edit 2: 由于这是一个完全不同的问题,我为此方法发布了一个新问题:Lucene中多值字段的顺序稳定吗? https://stackoverflow.com/questions/4951215/is-the-order-of-multi-valued-fields-in-lucene-stable

好吧,让我们尝试另一种方法......关键问题是同一字段名称(例如“标签”)下的多个字段值的不确定性。如果我可以在这里引入或获得某种确定性,我也许可以将元数据存储在另一个字段中。

例如,如果我可以依赖字段值的顺序永远不会改变,我可以使用值集中的索引来准确识别我所引用的标签。

当我稍后检索文档时,是否可以保证向字段添加值的顺序保持不变?


根据您对此索引的搜索要求,这可能是可能的。这样您就可以控制字段的顺序。当然,随着标签列表的变化,这需要更新这两个字段,但开销可能是值得的。

doc.Add(new Field("tags", "{personal}|{favorite}")); 
doc.Add(new Field("tagsref", "{1234}|{12345}")); 

注意:使用 {} 可以让您在存在相似值的情况下限定搜索的唯一性。

示例:如果值存储为“person|personal|personage”,搜索“person”将返回包含 person、personal 或 personage 中任何一个的文档。通过像这样在大括号中进行限定:“{person}|{personal}|{personage}”,我可以搜索“{person}”并确保它不会返回误报。当然,这假设您在值中不使用大括号。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以将自定义元数据添加到 Lucene 字段? 的相关文章

随机推荐