Lucene:使用FuzzyQuery在搜索中搜索

时间:2010-10-12 12:39:04

标签: lucene fuzzy-search pylucene

我需要使用包含大约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。

1 个答案:

答案 0 :(得分:2)

Doppleganger,您可以使用Filter,特别是QueryWrapperFilter。 按照Lucene in Action中的示例进行操作。您可能需要进行一些修改才能在python中使用,但除此之外它应该很简单:

  1. 创建将此范围缩小到5000次点击的查询。
  2. 使用它来构建QueryWrapperFilter。
  3. 在涉及模糊查询的搜索中使用过滤器。