我读过这个问题,我的一位同事让我怀疑:
在筛选查询中,何时应用过滤器?在执行查询之前或之后?结果何时缓存?
如果预先应用过滤器,在过滤器中复制查询部分不是一件好事吗?如果之后应用了过滤器,那么我无法理解缓存的内容.
幸运的是,ES提供了两种类型的过滤器供您使用:
{
"query" : {
"field" : { "title" : "Catch-22" }
},
"filter" : {
"term" : { "year" : 1961 }
}
}
{
"query": {
"filtered" : {
"query" : {
"field" : { "title" : "Catch-22" }
},
"filter" : {
"term" : { "year" : 1961 }
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,过滤器应用于查询找到的所有文档.在第二种情况下,在查询运行之前过滤文档.这会产生更好的性能.
引用自:http://www.packtpub.com/elasticsearch-server-for-fast-scalable-flexible-search-solution/book
关于缓存,我不确定过滤器的缓存机制.我的猜测是:第一种情况,因为过滤器是针对查询返回的一组结果,所以缓存是特定于此返回集的类型.第二种情况,首先应用过滤器,为你检查的索引存储缓存,因此,这个缓存更可重用,因为它不依赖于查询的内容,但是第一次内存成本和查询时间更长(在生成缓存之前).
| 归档时间: |
|
| 查看次数: |
2133 次 |
| 最近记录: |