es的文档有说道,filter的速度要快于query,因为filter不需要执行评分,再加上使用了缓存,所以速度要快于query
于是进行相关的测试。
如:QueryString,Terms,Term等方式的Query和Filter方式的检索测试对比。
结果发现以上的测试方面,filter都不及query快。
疑惑了?不是说filter速度要快于query吗?难道官方文档写错了,不会吧,可是网上也n多人说filter的速度要快于query啊!
上面的疑惑困扰了很久,直到一个阳光明媚的日子,困惑终于解除了。
原来filter的快速,是要基于上一次检索的。
如:
先执行查询:
{
"query" : {
"terms" : {
"creatorFullField" : [ "王玉平" ]
}
},
"post_filter" : {
"query" : {
"query_string" : {
"query" : "中国",
"fields" : [ "_all" ],
"default_operator" : "and"
}
}
}
}
然后再执行查询:
{
"query" : {
"terms" : {
"creatorFullField" : [ "王玉平" ]
}
},
"post_filter" : {
"bool" : {
"must" : [ {
"query" : {
"query_string" : {
"query" : "中国",
"fields" : [ "_all" ],
"default_operator" : "and"
}
}
}, {
"terms" : {
"dateYear" : [ 2005 ]
}
} ]
}
}
}
这样,第二个查询就能很快的执行完毕。比同等方式的query要快100多倍