Comme Andrei a souligné dans les commentaires, c'est la compréhension correcte pour un bool
filtre:
must
peut être traduit par (A and B)
should
peut être traduit comme (C or D)
must_not
peut être traduit par ((not E) and (not F))
Chacune d'elles est une opération autonome, mais elle peut être combinée exactement comme vous l'avez montré.
(A and B) and (C or D) and ((not E) and (not F))
En termes de logique booléenne, la raison pour laquelle ce n'est pas la même chose que (not (E and F))
est parce que c'est la même chose que dire ((not E) or (not F))
. Si E
est le même que dire field == 5
et F
est le même que dire field == 6
, alors c'est la même chose que field != 5 or field != 6
, ce qui est toujours le cas!
Cela conduit à regarder d'une manière différente:
must_not
peut être traduit par (not (E or F))
En d'autres termes, le document ne correspond pas si aucun filtre ne correspond pas. Cela conduit à une version légèrement simplifiée de la version combinée:
(A and B) and (C or D) and (not (E or F))
Cela serait correct, oui. –
Andrei, si vous faites votre réponse une réponse, je vais le sélectionner. La raison pour laquelle je pose cette question est que "must_not" peut être déroutant. Ce n'est pas "pas (E et F)" Merci! Pickypg – curious1