一些Lucene的问题

时间:2009-09-06 02:41:02

标签: zend-framework lucene full-text-search zend-search-lucene

我一直在使用Zend并需要搜索。 Zend文档不是很好,所以我有几个问题很容易回答,但不是直接明显的。我正在使用Lucene搜索SQL数据库

  1. 如何将项目的索引与该项目的文本相关联。因此,如果他们搜索并找到该项目,我该如何获得其索引?据我所知,你只能返回搜索文本。

  2. 当我在包含所有数据的文档中添加项目,但文档已经创建时,它只是一个打开('文档'),$ doc = new Doc(),$ doc-&gt ; addDocument(),commit()?

  3. 据我所知,每次向数据库添加内容时都会更新Lucene文档。在优化中,我应该在每次添加内容时重新优化吗?那效率低吗?我应该每周做一次吗?

  4. 很抱歉,问一下看起来很明显的问题,并提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

  1. '索引,你要检索' - 你必须索引你想要最终返回的内容。也就是说,如果您希望在搜索文本“Flux Capacitator”时能够返回记录ID 1389,则应该将文本存储在一个字段中,将id存储在另一个字段中。 id字段不必编入索引,但必须存储它才能将其恢复。
  2. 您正在寻找的是“更新文档”操作。 Lucene并没有真正拥有它们。您应首先删除该文档,然后添加包含更新信息的新文档。现在回到第1项,获取你在那里添加的id字段并将其编入索引(比如Keyword),因为你需要将它用作文档的唯一标识符才能删除它。
  3. 好问题。这在很大程度上取决于您的使用案例。当您的站点/数据库相对空闲时,您是否每天都有“死时间”?那将是优化的时候。你没有这样的时间吗?您可以放弃优化并采取小的(比如5-10%)性能损失,这也可以使用Merge Factor来缓解。
  4. 我希望这是有道理的。如果没有,请在评论中提问。

答案 1 :(得分:0)

第3点)在Lucene 2.9中作为NRT( NearRealtimeSearch )通过SegmentReader +内部RamDirectory使用实现

检查OtisGospodnetic wiki entry