一、Query Cache
Query Cache也称为Filter Cache,顾名思义它的作用就是对一个查询中包含的过滤器执行结果进行缓存。
比如我们常用的term,terms,range过滤器都会在满足某种条件后被缓存,注意,这里的bool过滤器是不会被缓存的,但bool过滤器包含的子query clause会被缓存,我们可以用下面的命令来查询Query Cache的情况。
http://192.168.0.109:9200/_stats/query_cache?pretty&human
举个栗子,看下面的查询
{
"from": 0,
"size": 5,
"query": {
"bool": {
"filter": {
"bool": {
"must": [
{
"term": {
"productID": "JODL-X-1937-#pV7"
}
},
{
"range": {
"price": {
"from": 20,
"to": null,
"include_lower": true,
"include_upper": true
}
}
}
]
}
}
}
}
}
上面有两个过滤器一个Term过滤器用来过滤productID为“JODL-X-1937-#pV7” 的产品,一个range过滤器用来过滤价格在20以上的产品,在这个例子中这两个过滤器执行的结果会分别作为一个BitSet(位图)缓存,返回的查询结果则是这两个位图交集。
上面提到Filter Cache只会在满足某种条件下才会被缓存,至于是哪些条件这里就不介绍了,想了解的童鞋戳下面链接。
关于Filter执行流程及缓存原理 ,请参看此文:
《Elasticsearch2.X Filter执行流程及缓存原理》
二、Request Cache
当一个查询发送到ES集群的某个节点上时,这个节点会把该查询扩散到其他节点并在相应分片上执行,我们姑且把