在Lucene中,{Filter}比{Query}更快吗?

在Lucene中,{Filter}比{Query}更快吗?,第1张

在Lucene中,{Filter}比{Query}更快吗?

Uwe Schindler收到了很好的答复,让我在这里重新发布。

如果您不缓存过滤器,则查询会更快,因为Lucene中的ConjunctionScorer进行了优化,这些优化目前未用于过滤器。如果您对过滤器进行缓存(例如,如果您始终对应用于其所有查询的特定用户具有相同的访问限制),则可以使用过滤器。在这种情况下,过滤器仅执行一次,并为所有其他请求进行缓存,然后与查询结果集相交。

如果您只想例如按地理搜索中的边界框之类的变量数值范围进行“过滤”,则使用查询,在大多数情况下查询会更快(例如,范围查询和类似的东西-
MultiTermQueries在内部也可以与Filter相同的BitSet算法-实际上,它们只是由Scorer-
impl包装的Filter)。但是,将查询和您的“过滤器”查询与在一起的记分器(ConjunctionScorer)通常比搜索后应用过滤器的代码更快。这可能会有所改进,但是通常在Lucene中不再需要过滤器,因此已经有了一些使过滤器和查询相同的方法,然后可以缓存非计分查询。

如果将过滤器插入IndexReader的顶部以 评分 之前 过滤文档,则Lucene 4.0可以极大地提高速度,但这尚未实现(请参阅
https://issues.apache.org/jira/browse/LUCENE-3212))
-
我正在做。我们还可以使Filters随机访问(这很容易,因为它们是位集),这也可以改善查询后过滤。但是,如果查询可以支持的话,我也可以使其部分随机访问(例如仅基于FieldCache的查询)。

乌韦



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5489786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存