1

我需要使用包含大约 800 万行的索引来制作FuzzyQuery 。这种查询非常慢,每次匹配大约需要 20 秒。事实是,在进行模糊搜索之前,我可以使用另一个字段将结果缩小到大约 5000 个命中。为此,我应该能够先通过“较窄”字段进行搜索,然后在这些结果中使用模糊搜索。

根据lucene FAQ,我唯一要做的就是BooleanQuery,其中应该需要“更窄”(在 lucene 3 中为BooleanClause.Occur.MUST )。

现在我尝试了两种不同的方法:

a)使用查询解析器,输入如下: narrower:+narrowing_text fuzzy:fuzzy_text~0.9

b)使用TermQueryFuzzyQuery构造BooleanQuery

也没有工作,我得到的时间与不使用较窄的时间大致相同。

此外,只是为了检查是否窄的工作时间应该更好,我只重新索引了与窄匹配的 5000 个项目,搜索速度非常快。

如果有人想知道,我使用的是 pylucene 3.0.2。

4

1 回答 1

2

Doppleganger,您可能可以使用Filter,特别是QueryWrapperFilter。遵循Lucene in Action 中的示例。您可能需要进行一些修改才能在 python 中使用,否则应该很简单:

  1. 创建将其缩小到 5000 个命中的查询。
  2. 使用它来构建 QueryWrapperFilter。
  3. 在涉及模糊查询的搜索中使用过滤器。
于 2010-10-12T15:09:48.973 回答