此查询在每次执行时都会占用200+ ms:
{
"filter": {
"term": {
"id": "123456",
"_cache": true
}
}
}但是这个在第一次查询后每次执行只需要2-3毫秒:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": {
"id": "123456"
}
}
}
}
}请注意,两个查询中的ID值相同。看起来第二个查询使用了第一个查询的缓存结果。但是为什么第一个查询本身不能使用缓存的结果呢?从第一个查询中删除"_cache" : true不会改变任何东西。
当我使用其他ID执行第二个查询时,第一次执行它需要大约40毫秒,之后每次执行2-3毫秒。因此,第二个查询不仅速度更快,而且还缓存结果,并将缓存用于后续调用。
对这一切有什么解释吗?
发布于 2012-12-23 11:14:44
第一个请求中的顶级filter元素在Elasticsearch中具有非常特殊的功能。它用于过滤搜索结果,而不影响facet。为了避免干扰方面,此过滤器在收集结果时应用,而不是在搜索期间应用,这导致其性能较慢。使用不带facet的顶级filter意义不大,因为filtered和constant_score查询通常提供更好的性能。如果您对match_all filtered查询的冗长感到困扰,您可以将第二个请求重写为等效的constant_score查询:
{
"query": {
"constant_score": {
"filter": {
"term": {
"id": "123456"
}
}
}
}
}https://stackoverflow.com/questions/14007078
复制相似问题