Heureusement, ES fournit deux types de filtres pour vous de travailler avec:
{
"query" : {
"field" : { "title" : "Catch-22" }
},
"filter" : {
"term" : { "year" : 1961 }
}
}
{
"query": {
"filtered" : {
"query" : {
"field" : { "title" : "Catch-22" }
},
"filter" : {
"term" : { "year" : 1961 }
}
}
}
}
Dans le premier cas, les filtres sont appliqués à tous les documents trouvés par la requête. Dans le second cas, les documents sont filtrés avant l'exécution de la requête. Cela donne de meilleures performances.
Cité de: http://www.packtpub.com/elasticsearch-server-for-fast-scalable-flexible-search-solution/book
A propos de cache, je ne suis pas sûr de mécanisme de cache des filtres. Mes devinettes seraient: Premier cas, puisque le filtre est contre un ensemble de résultats renvoyés par requête, le cache est spécifique de ce jeu de retour. Deuxième cas, le filtre est appliqué en premier, le cache est stocké pour les index que vous avez vérifiés, donc ce cache est plus réutilisable car il ne dépend pas du contenu de la requête, mais à un coût de mémoire plus élevé. heure (avant que le cache ne soit généré).