Lucene:Query和Filter之间有什么区别

时间:2010-09-15 19:18:02

标签: lucene lucene.net

Lucene查询vs过滤器?

它们都像termquery过滤器那样执行类似的术语,过滤器我猜是出于类似的目的。

您何时使用过滤器和查询?

今天刚开始使用lucene,试图明确概念

3 个答案:

答案 0 :(得分:19)

过滤器不会影响未过滤文档得分的计算。

例如想象以下文档:

1.
loc: "uk", "london"
text: "i live in london, "london is the best"

2.
loc: "london avenue", "london street", "london"
text: "I like the shop in london st."

现在让我们说您执行以下查询:

q=+loc:"london" +text:"london"

在此查询中,doc 2的得分高于doc 1的得分(因为loc是在文档得分中计算的)

使用过滤器:

q=+text:"london" f=+loc:"london"

在此查询中,doc 1的得分高于doc 2的得分。

请原谅Solr样式格式,但整体概念很清楚。

使用过滤器的其他原因是出于缓存目的,过滤器与查询分开缓存,因此如果您有静态部分的动态查询,则按静态部分进行过滤是有意义的。通过这种方式,索引遍历仅限于已过滤文档的子集。

答案 1 :(得分:9)

可以将Query传递给Searcher以查找文档。 Filter不能;它只能修改Query生成的结果。

实施新的Query类型相当复杂,需要了解Lucene内部的关系,例如WeightScorerSimilarityFilter实施可能相当简单,并且根本不与IndexReader进行交互。

答案 2 :(得分:0)

关闭数据库后,过滤器的选择将消失。但是当你关闭一个Query并再次打开它时,它仍然会存在。

您还可以使用表单创建查询。但是你不能在表格中使用过滤器。