【问题标题】:A few Lucene questions几个 Lucene 问题
【发布时间】:2009-09-06 02:41:01
【问题描述】:

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

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

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

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

很抱歉提出看似显而易见的问题,提前感谢您的帮助。

【问题讨论】:

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


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

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

    【讨论】:

    • 其实我有一个问题。假设我有一个包含单词“football”的搜索测试。如果我搜索“脚”,它似乎没有出现。有没有办法做到这一点?
    【解决方案2】:

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

    检查 OtisGospodnetic wiki entry

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 2015-01-03
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多