¿Cuál es la diferencia entre MUST
y SHOULD
bool query en ES?
Si SOLO quiero resultados que contengan mis términos, ¿debería usarlos must
?
Tengo una consulta que solo debe contener ciertos valores, y tampoco resultados que tengan una fecha / marca de fecha más baja que la fecha / hora de hoy - AHORA
también
¿Puedo usar varios filtros dentro de un must como el código siguiente:
"filtered": {
"filter": {
"bool" : {
"must" : {
"term" : { "type" : 1 }
"term" : { "totals" : 14 }
"term" : { "groupId" : 3 }
"range" : {
"expires" : {
"gte": "now"
}
}
},
fuente
must
de las categorías, los precios y losshould
atributos, como el tamaño y el color? Ahora, si se seleccionan el tamaño L y XL, es un deber entre esos dos, pero si también se selecciona el color verde, debe ser imprescindible para (tamaños L o XL) Y (color verde). ¿Es eso posible?minimum_number_should_match = 1
para hacer cumplir la idea de que "al menos una de estas cláusulas debe coincidir".Como esta es una pregunta popular, me gustaría agregar que en Elasticsearch versión 2 las cosas cambiaron un poco.
En lugar de
filtered
consulta, uno debe usar labool
consulta en el nivel superior.Si no te importa la puntuación de las
must
partes, pon esas partes enfilter
clave. Sin puntuación significa búsqueda más rápida. Además, Elasticsearch determinará automáticamente si almacenarlos en caché, etc.,must_not
es igualmente válido para el almacenamiento en caché.Referencia: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
Además,
"gte": "now"
tenga en cuenta que no se puede almacenar en caché, debido a la granularidad de milisegundos. Use dos rangos en unamust
cláusula: uno connow/1h
y otro connow
para que el primero se pueda almacenar en caché por un tiempo y el segundo para un filtrado preciso acelerado en un conjunto de resultados más pequeño.fuente
Como se dice en la documentación :
En otras palabras, los resultados tendrán que ser igualada por todas las consultas presente en el mosto de la cláusula (o coincida con al menos una de las deberían cláusulas si no hay necesidad cláusula.
Como desea que sus resultados satisfagan todas las consultas, debe usar must .
De hecho, puede usar filtros dentro de una consulta booleana.
fuente