query - Elasticsearch diferencia entre DEBE y DEBE consulta bool
elasticsearch should inside must (3)
Como esta es una pregunta popular, me gustaría agregar que en Elasticsearch versión 2 las cosas cambiaron un poco.
En lugar de una consulta
filtered
, uno debe usar la consulta
bool
en el nivel superior.
Si no le importa la puntuación de las partes
must
, coloque esas partes en la tecla de
filter
.
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, tenga en cuenta que
"gte": "now"
no se puede almacenar en caché, debido a la granularidad de milisegundos.
Use dos rangos en una cláusula
must
: una con
now/1h
y otra con
now
para que el primero se pueda almacenar en caché durante un tiempo y el segundo para un filtrado preciso acelerado en un conjunto de resultados más pequeño.
¿Cuál es la diferencia entre
MUST
y
SHOULD
consultar bool en ES?
Si
SOLO
quiero resultados que contengan mis términos, ¿debo usar
must
?
Tengo una consulta que solo debe contener ciertos valores, y tampoco resultados que tengan una fecha / marca de tiempo 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"
}
}
},
Como se dice en la documentation :
Debe: la cláusula (consulta) debe aparecer en los documentos coincidentes.
Debería: La cláusula (consulta) debería aparecer en el documento correspondiente. En una consulta booleana sin cláusulas must, una o más cláusulas must deben coincidir con un documento. El número mínimo de cláusulas debería coincidir se puede establecer utilizando el parámetro minimum_should_match.
En otras palabras, los resultados deberán coincidir con todas las consultas presentes en la cláusula must (o coincidir con al menos una de las cláusulas must si no hay una cláusula must) .
Como desea que sus resultados satisfagan todas las consultas, debe usar must .
De hecho, puede usar filtros dentro de una consulta booleana.
must significa: la cláusula (consulta) debe aparecer en los documentos coincidentes. Estas cláusulas deben coincidir, como lógico AND .
debería significar: Al menos una de estas cláusulas debe coincidir, como OR lógico.
Básicamente se usan como operadores lógicos AND y OR. Mira this .
Ahora en una https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html :
must significa: Cláusulas que deben coincidir para que se incluya el documento.
debería
significar: si estas cláusulas coinciden, aumentan la
_score
;
de lo contrario, no tienen efecto.
Simplemente se utilizan para refinar la puntuación de relevancia para cada documento.
Sí, puedes usar múltiples filtros dentro de
must
.