1

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

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

  2. 当我将一个项目添加到包含所有数据的文档中,但该文档已经创建时,它只是一个 open('document'), $doc = new Doc(), $doc->addDocument(), commit( )?

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

很抱歉问什么似乎很明显的问题,并提前感谢您的帮助。

4

2 回答 2

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

我希望这是有道理的。如果没有,请在评论中询问。

于 2009-09-06T06:28:35.967 回答
0

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

检查 OtisGospodnetic wiki 条目

于 2009-09-07T08:42:21.050 回答