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

Lucene 标记可以经常更改的标记文档的索引策略,lucene,lucene.net,Lucene,Lucene.net,除了文本内容之外,我的文档还有可以搜索的标签。现在的问题是,标记经常更改,每次添加或删除标记时,我都必须调用UpdateDocument,这对于数百个文档来说是非常缓慢的 对于经常更改并需要使用Lucene搜索的标签,是否有性能良好的存储策略?我一直在考虑将标记保存在单独的文档中,以使它们更小,但我不知道如何快速搜索标记和内容。将[tag,UID]对存储在关系数据库中。每次添加或更新标记时,都会在数据库的该表中添加和更新该标记 当执行包含标记数据(存储在数据库中)和内容(在Lucene中编制索引

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


对于经常更改并需要使用Lucene搜索的标签,是否有性能良好的存储策略?我一直在考虑将标记保存在单独的文档中,以使它们更小,但我不知道如何快速搜索标记和内容。

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

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

  • 进行数据库查询,以提取所讨论标记的所有UID
  • 将所有UID转换为Lucene文档ID,并在每个匹配的Lucene文档ID的位集中设置一个位
  • 创建一个用于包装位集的筛选器,并将该筛选器传递到搜索中

  • 我们在我们的系统中实现了这种方法,并且效果很好。不过,出于性能原因,您可能需要在数据库前面放置缓存。步骤(3)的细节将因您使用的Lucene版本而异。

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

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

  • 进行数据库查询,以提取所讨论标记的所有UID
  • 将所有UID转换为Lucene文档ID,并在每个匹配的Lucene文档ID的位集中设置一个位
  • 创建一个用于包装位集的筛选器,并将该筛选器传递到搜索中

  • 我们在我们的系统中实现了这种方法,并且效果很好。不过,出于性能原因,您可能需要在数据库前面放置缓存。步骤(3)的详细信息将因您使用的Lucene版本而异。

    谢谢!将缓存放在数据库中标记的前面应该可以工作。谢谢!将缓存放在数据库中标记的前面应该可以工作。