2013-07-19 1 views
5

J'ai lu this question et un de mes collègues m'a fait douter:requêtes vs filtres - Ordre d'exécution

Dans une requête filtrée, quand le filtre est appliqué? Avant ou après l'exécution de la requête? Quand le résultat est-il mis en cache?

Si le filtre est appliqué au préalable, ne serait-il pas une bonne chose de dupliquer la partie requête dans les filtres? Si le filtre est appliqué par la suite, j'ai de la difficulté à comprendre ce qui est mis en cache.

Répondre

9

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é).

1

Permettez-moi de vous expliquer que vous effectuez une recherche requête Execution-

La première chose est qu'il ya toujours un document de référence complet dans lequel vous souhaitez rechercher.

Si vous avez inclus une requête de filtre avec une requête de recherche, cela réduira ce document ou, en d'autres termes, les requêtes de filtrage seront mises en cache dans les résultats de la même requête. Vous avez maintenant un arbre plus petit à rechercher avec votre texte de requête. Maintenant vos doutes font partie- La duplication de la requête dans les filtres ne fera qu'augmenter le mécanisme de cache et il y a beaucoup de lignes directrices sur ce qu'il faut inclure dans la requête de filtre et ce qu'il faut ignorer. Tout est jeu de pertinence.

Questions connexes