我需要使用包含大约 800 万行的索引来制作FuzzyQuery 。这种查询非常慢,每次匹配大约需要 20 秒。事实是,在进行模糊搜索之前,我可以使用另一个字段将结果缩小到大约 5000 个命中。为此,我应该能够先通过“较窄”字段进行搜索,然后在这些结果中使用模糊搜索。
根据lucene FAQ,我唯一要做的就是BooleanQuery,其中应该需要“更窄”(在 lucene 3 中为BooleanClause.Occur.MUST )。
现在我尝试了两种不同的方法:
a)使用查询解析器,输入如下:
narrower:+narrowing_text fuzzy:fuzzy_text~0.9
b)使用TermQuery和FuzzyQuery构造BooleanQuery
也没有工作,我得到的时间与不使用较窄的时间大致相同。
此外,只是为了检查是否窄的工作时间应该更好,我只重新索引了与窄匹配的 5000 个项目,搜索速度非常快。
如果有人想知道,我使用的是 pylucene 3.0.2。