mam*_*amu 27 lucene lucene.net
Lucene查询vs过滤器?
他们都做类似的事情,如termquery过滤器的术语值,过滤器我猜是有类似的目的.
你什么时候使用过滤器和查询?
今天就开始使用lucene,试图清除概念
Asa*_*saf 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."
Run Code Online (Sandbox Code Playgroud)
现在假设您执行以下查询:
q=+loc:"london" +text:"london"
Run Code Online (Sandbox Code Playgroud)
在此查询中,doc 2的得分高于doc 1 loc的得分(因为在文档得分中计算)
使用过滤器:
q=+text:"london" f=+loc:"london"
Run Code Online (Sandbox Code Playgroud)
在此查询中,doc 1的分数高于doc 2的分数.
请原谅Solr样式格式,但整体概念很清楚.
使用过滤器的其他原因是出于缓存目的,过滤器与查询分开缓存,因此如果您有一个带静态部分的动态查询,则按静态部分进行过滤是有意义的.通过这种方式,索引遍历仅限于已过滤文档的子集.
A Query可以传递给a Searcher来查找文档.一个Filter不能; 它只能修改a产生的结果Query.
实施新的Query类型是相当复杂的,需要Lucene的内部样的关系的理解Weight,Scorer和Similarity.一个Filter实现可以是相当简单的,而不是与互动IndexReader的.