Lucene查询vs过滤器?
它们都像termquery过滤器那样执行类似的术语,过滤器我猜是出于类似的目的。
您何时使用过滤器和查询?
今天刚开始使用lucene,试图明确概念
答案 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内部的关系,例如Weight
,Scorer
和Similarity
。 Filter
实施可能相当简单,并且根本不与IndexReader
进行交互。
答案 2 :(得分:0)
关闭数据库后,过滤器的选择将消失。但是当你关闭一个Query并再次打开它时,它仍然会存在。
您还可以使用表单创建查询。但是你不能在表格中使用过滤器。