使用可以频繁更新的字段创建Lucene索引的最佳方法,并按此字段筛选结果

时间:2010-11-01 19:23:56

标签: database search search-engine lucene

我使用Lucene索引我的文档和搜索。实际上我在Lucene索引了800k文件。这些文件有一些领域:

Id :是索引文档的数字字段

名称:是要存储和分析的文本字段

说明:喜欢名称

可用性:是一个用于过滤结果的数字字段。该字段可以每天更新。

我的问题是:为可用性创建过滤器的更好方法是什么?

1 - 将此信息添加到索引并生成lucene过滤器。 使用这种方法,每次“可用性”发生变化时,我都必须更新文档(删除并添加,因为lucene 3.0.2没有更新支持)。 reindex的成本是多少?

2 - 不要将此信息添加到索引,并使用数据库选择过滤结果。 这种方法会做很多选择,因为我需要从数据库中选择每个id来检查可用性。

3 - 创建具有ID和可用性的分隔索引。 我不知道它是否是一个很好的解决方案,但我可以创建一个带静态信息的索引,其他信息可以经常更新。我认为最好更新所有文档,因为某些字段已更新。

2 个答案:

答案 0 :(得分:2)

我会远离2,如果你只能处理lucene中的搜索,而不是在lucene + db中搜索,那就去做吧。我用这个案例处理我的项目(Lucene搜索+ DB搜索),但我这样做是因为没有办法解决它。

更新的费用在内部:

  • 删除文档

  • 插入新文档(使用新字段)。

我会尝试接近1号(最简单),如果性能足够好,那么只要坚持下去,如果没有,那么你可能会想方设法优化它或尝试3。

答案 1 :(得分:0)

lucene-groupmail提供的答案:

多久一次“经常”?你期望做多少次更新 一天?这些更新必须在搜索中反映多快 结果

800K文件并不是那么多。我先用简单的方法 并监控结果,#然后#转到更复杂的解决方案,如果你 看到出现的问题。只需更新(删除/添加)文档 价值变化。

嗯,重新索引的成本只是将其索引成本的成本 是。旧版本的文档被标记为已删除和新版本 被添加。它与索引新文档的成本基本相同。 这会在索引中留下一些空白,即已删除的文档仍然存在 那里,但下一次优化将压缩它们。

您可以从中推断优化是昂贵的部分。我会这样做的, 说 每天一次(甚至每周一次)。

HTH 埃里克