Quelle est la différence entre MUST
et une SHOULD
requête booléenne dans ES?
Si je veux UNIQUEMENT des résultats contenant mes conditions, dois-je les utiliser must
?
J'ai une requête qui ne devrait contenir que certaines valeurs, et également aucun résultat qui a une date / horodatage inférieure à l'heure / date d'aujourd'hui - MAINTENANT
Aussi
Puis-je utiliser plusieurs filtres dans un must comme le code ci-dessous:
"filtered": {
"filter": {
"bool" : {
"must" : {
"term" : { "type" : 1 }
"term" : { "totals" : 14 }
"term" : { "groupId" : 3 }
"range" : {
"expires" : {
"gte": "now"
}
}
},
la source
must
des catégories, des prix etshould
des attributs, comme la taille et la couleur. Maintenant, si la taille L et XL est sélectionnée, c'est un must entre ces deux, mais si la couleur verte est également sélectionnée, elle doit être un must pour (tailles L OU XL) ET (couleur verte). Est-ce possible?minimum_number_should_match = 1
pour appliquer l'idée qu '"au moins une de ces clauses doit correspondre".Comme il s'agit d'une question populaire, je voudrais ajouter que dans Elasticsearch version 2, les choses ont un peu changé.
Au lieu de la
filtered
requête, il faut utiliser labool
requête au niveau supérieur.Si vous ne vous souciez pas du score des
must
parties, mettez ces parties enfilter
clé. Aucun score signifie une recherche plus rapide. En outre, Elasticsearch déterminera automatiquement si les mettre en cache, etc.must_not
est également valable pour la mise en cache.Référence: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
Notez également que
"gte": "now"
cela ne peut pas être mis en cache, en raison de la granularité milliseconde. Utilisez deux plages dans unemust
clause: une avecnow/1h
et une autre avecnow
afin que la première puisse être mise en cache pendant un certain temps et la seconde pour un filtrage précis accéléré sur un ensemble de résultats plus petit.la source
Comme indiqué dans la documentation :
En d'autres termes, les résultats devront correspondre à toutes les requêtes présentes dans la clause must (ou correspondre à au moins une des clauses should s'il n'y a pas de clause must .
Puisque vous voulez que vos résultats satisfassent à toutes les requêtes, vous devez utiliser must .
Vous pouvez en effet utiliser des filtres dans une requête booléenne.
la source