我需要使用包含大约800万行的索引来创建 FuzzyQuery 。这种查询非常慢,每场比赛需要大约20秒。事实是,在进行模糊搜索之前,我可以使用另一个字段将结果缩小到大约5000次点击。为了实现这一点,我应该首先通过“较窄”字段进行搜索,然后在这些结果中使用模糊搜索。
根据lucene FAQ,我唯一需要做的是 BooleanQuery ,其中应该需要“更窄”( BooleanClause.Occur.MUST 在lucene 3)。
现在我尝试了两种不同的方法:
a)使用Query Parser,输入如下:
narrower:+narrowing_text fuzzy:fuzzy_text~0.9
b)使用 TermQuery 和 FuzzyQuery 构建 BooleanQuery
两者都没有奏效,我得到的时间与使用较窄者的时间差不多。
另外,只是为了检查如果更窄的工作时间应该好多了,我只重新编制了与较窄的匹配的5000个项目,并且搜索速度很快。
如果有人想知道,我正在使用pylucene 3.0.2。
答案 0 :(得分:2)
Doppleganger,您可以使用Filter,特别是QueryWrapperFilter。 按照Lucene in Action中的示例进行操作。您可能需要进行一些修改才能在python中使用,但除此之外它应该很简单: