2010-10-12 54 views
1

我需要使用包含大约800万行的索引创建FuzzyQuery。这种查询很慢,每场比赛需要大约20秒。事实是,在进行模糊搜索之前,我可以使用另一个字段将搜索结果缩小到约5000个点击量。为了达到这个目的,我应该能够首先通过“较窄”字段进行搜索,然后在这些结果中使用模糊搜索。Lucene:使用FuzzyQuery在搜索范围内搜索

按照lucene FAQ,我要做的唯一事情是BooleanQuery,这里的“窄”应符合规定(BooleanClause.Occur.MUST在Lucene中3)。

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

一个)使用查询解析器,用等的输入: narrower:+narrowing_text fuzzy:fuzzy_text~0.9

B)构建BooleanQueryTermQuery和一个FuzzyQuery

都没有工作,我得到的时间大约是那些不使用较窄的时间。

此外,只是为了检查如果狭窄工作的时间应该会好得多,我只索引5000个匹配更窄的项目,并且搜索速度很快。

如果有人奇怪,我使用pylucene 3.0.2。

+0

模糊查询得到多少结果?我问,因为我想知道是实际搜索还是重写速度很慢。 – Xodarap 2010-10-13 19:55:45

回答

2

Doppleganger,你可以使用Filter,特别是QueryWrapperFilter。 请按照Lucene in Action中的示例进行操作。您可能需要对Python进行一些修改,否则它应该很简单:

  1. 创建将查询缩小到5000个查询的查询。
  2. 用它来构建QueryWrapperFilter。
  3. 在涉及模糊查询的搜索中使用过滤器。
+0

我也想过这个解决方案,但是如果你检查我在问题中给出的Lucene FAQ链接,它说使用QueryFilter不是推荐的解决方案,所以我试图找出为什么“正确”解决方案不是不为我工作。 – Doppelganger 2010-10-13 17:44:56

+0

听起来像是你的“正确”解决方案的性能不好,所以我建议你尝试一下这个...... – 2010-10-13 18:26:39