Je ne vois aucune description du moment où je devrais utiliser une requête ou un filtre ou une combinaison des deux. Quelle est la différence entre eux? Quelqu'un peut-il expliquer?
elasticsearch
Jonesie
la source
la source
Réponses:
La différence est simple: les filtres sont mis en cache et n'influencent pas le score, donc plus vite que les requêtes. Jetez un œil ici aussi. Disons qu'une requête est généralement quelque chose que les utilisateurs tapent et à peu près imprévisible, tandis que les filtres aident les utilisateurs à affiner les résultats de la recherche, par exemple en utilisant des facettes.
la source
Voici ce que dit la documentation officielle:
la source
Un exemple (essayez-le vous-même)
L'index de Say
myindex
contient trois documents:Requête
hello sam
(à l'aide d'un mot clémust
)Le document
"Hello world! I am Sam."
reçoit un score plus élevé que"Hello world!"
, car le premier correspond aux deux mots de la requête. Les documents sont notés.Filtre
hello sam
(à l'aide d'un mot-cléfilter
)Les documents contenant soit
hello
ousam
sont retournés. Les documents ne sont PAS notés .Sauf si vous avez besoin d'une recherche ou d'une notation en texte intégral, les filtres sont préférés car les filtres fréquemment utilisés seront automatiquement mis en cache par Elasticsearch, pour accélérer les performances. Voir Elasticsearch: contexte de requête et de filtre.
la source
Peu d'autres ajouts à la même chose. Un filtre est d'abord appliqué, puis la requête est traitée sur ses résultats. Pour stocker la correspondance binaire vrai / faux par document, quelque chose appelé un tableau bitSet est utilisé. Ce tableau BitSet est en mémoire et serait utilisé à partir de la deuxième interrogation du filtre. De cette façon, en utilisant la structure de données du tableau de bits, nous pouvons utiliser le résultat mis en cache.
Encore un point à noter ici, le cache de filtre n'est créé que lorsque la demande est exécutée, donc uniquement à partir du deuxième hit, nous obtenons en fait l'avantage de la mise en cache.
Mais alors vous pouvez utiliser une API plus chaude , pour dépasser cela. Lorsque vous enregistrez une requête avec un filtre par rapport à une API plus chaude, il s'assurera que celle-ci est exécutée sur un nouveau segment chaque fois qu'il est disponible. Par conséquent, nous obtiendrons une vitesse constante dès la première exécution elle-même.
la source
Fondamentalement, une requête est utilisée lorsque vous souhaitez effectuer une recherche sur vos documents avec notation. Et les filtres sont utilisés pour affiner l'ensemble des résultats obtenus en utilisant la requête. Les filtres sont booléens.
Par exemple, disons que vous avez un index des restaurants quelque chose comme la zomato. Maintenant, vous voulez rechercher des restaurants qui servent de la «pizza» , qui est essentiellement votre mot-clé de recherche.
Vous utiliserez donc la requête pour trouver tous les documents contenant "pizza" et quelques résultats seront obtenus.
Dites maintenant que vous voulez une liste de restaurants qui servent des pizzas et ont une note d'au moins 4,0.
Vous devrez donc utiliser le mot-clé "pizza" dans votre requête et d'appliquer le filtre pour une note de 4,0.
Ce qui se passe, c'est que des filtres sont généralement appliqués aux résultats obtenus en interrogeant votre index.
la source
Filters
-> Ce document correspond-il? une réponse binaire oui ou nonQueries
-> Ce document correspond-il? Dans quelle mesure cela correspond-il? utilise la notationla source
Depuis la version 2 d'Elasticsearch, les filtres et les requêtes ont été fusionnés et toute clause de requête peut être utilisée comme filtre ou requête (selon le contexte). Comme pour la version 1, les filtres sont mis en cache et doivent être utilisés si le scoring n'a pas d'importance.
Source: https://logz.io/blog/elasticsearch-queries/
la source