标记文档的索引策略,标记可以经常更改

时间:2010-07-30 14:31:16

标签: lucene lucene.net

除文字内容外,我的文档还有可以搜索的标签。现在的问题是标签经常变化,每次添加或删除标签时我都必须调用UpdateDocument,这对于数百个文档来说非常慢。

是否有任何表现良好的策略用于存储经常更改且需要使用Lucene进行搜索的标记?我一直在考虑将标签保存在单独的文档中以保持较小,但我无法弄清楚如何快速搜索标签和内容。

1 个答案:

答案 0 :(得分:4)

在关系数据库中存储[tag,UID]对。每次添加或更新标记时,都会在数据库的此表中添加和更新标记。

当执行包含标记数据(存储在数据库中)和内容(在Lucene中编制索引)的Lucene搜索时,您需要将结果合并在一起。一种方法是:

  1. 进行数据库查询以提取有问题标签的所有UID
  2. 将所有UID翻译为Lucene doc ID,并在BitSet中为每个匹配的Lucene文档ID设置一个位
  3. 创建一个包装BitSet的过滤器,并将该过滤器传递给您的搜索。
  4. 我们在系统中实施了这种方法,效果很好。出于性能原因,您可能需要在数据库前放置一个缓存。步骤(3)的细节将根据您使用的Lucene版本而有所不同。