No puedo ver ninguna descripción de cuándo debería usar una consulta o un filtro o alguna combinación de ambos. ¿Cuál es la diferencia entre ellos? ¿Alguien puede explicar?
elasticsearch
Jonesie
fuente
fuente
Respuestas:
La diferencia es simple: los filtros se almacenan en caché y no influyen en la puntuación, por lo tanto, son más rápidos que las consultas. Echa un vistazo aquí también. Digamos que una consulta suele ser algo que los usuarios escriben y es bastante impredecible, mientras que los filtros ayudan a los usuarios a reducir los resultados de búsqueda, por ejemplo, utilizando facetas.
fuente
Esto es lo que dice la documentación oficial:
fuente
Un ejemplo (pruébalo tú mismo)
Say index
myindex
contiene tres documentos:Consulta
hello sam
(usando la palabra clavemust
)Al documento
"Hello world! I am Sam."
se le asigna una puntuación más alta que"Hello world!"
, porque el primero coincide con ambas palabras en la consulta. Los documentos se puntúan.Filtrar
hello sam
(usando la palabra clavefilter
)Documentos que contienen
hello
osam
son devueltos. Los documentos NO se califican .A menos que necesite una búsqueda o puntuación de texto completo, se prefieren los filtros porque Elasticsearch almacenará en caché los filtros de uso frecuente para acelerar el rendimiento. Consulte Elasticsearch: consulta y filtro de contexto.
fuente
Pocas adiciones más a lo mismo. Primero se aplica un filtro y luego la consulta se procesa sobre sus resultados. Para almacenar la coincidencia binaria verdadero / falso por documento, se usa algo llamado bitSet Array. Esta matriz BitSet está en la memoria y se usaría desde la segunda vez que se consulta el filtro. De esta manera, utilizando la estructura de datos de la matriz de bitset, podemos utilizar el resultado almacenado en caché.
Un punto más a tener en cuenta aquí, la caché de filtro se crea solo cuando la solicitud se ejecuta, por lo tanto, solo desde el segundo golpe, en realidad obtenemos la ventaja del almacenamiento en caché.
Pero luego puede usar una API más cálida para superar esto. Cuando registra una consulta con filtro en una API más cálida, se asegurará de que se ejecute en un nuevo segmento cada vez que se active. Por lo tanto, obtendremos una velocidad constante desde la primera ejecución en sí.
fuente
Básicamente, una consulta se utiliza cuando desea realizar una búsqueda en sus documentos con puntuación. Y los filtros se utilizan para limitar el conjunto de resultados obtenidos mediante el uso de la consulta. Los filtros son booleanos.
Por ejemplo, digamos que tiene un índice de restaurantes algo así como zomato. Ahora desea buscar restaurantes que sirvan 'pizza' , que es básicamente su palabra clave de búsqueda.
Por lo tanto, utilizará la consulta para encontrar todos los documentos que contienen "pizza" y se obtendrán algunos resultados.
Digamos ahora que desea una lista de restaurantes que sirven pizza y tiene una calificación de al menos 4.0.
Entonces, lo que tendrá que hacer es usar la palabra clave "pizza" en su consulta y aplicar el filtro para calificar como 4.0.
Lo que sucede es que los filtros generalmente se aplican a los resultados obtenidos al consultar su índice.
fuente
Filters
-> ¿Coincide este documento? un binario sí o no respuestaQueries
-> ¿Coincide este documento? ¿Qué tan bien combina? usa puntuaciónfuente
Desde la versión 2 de Elasticsearch, los filtros y las consultas se han fusionado y cualquier cláusula de consulta se puede usar como filtro o consulta (según el contexto). Al igual que con la versión 1, los filtros se almacenan en caché y deben usarse si la puntuación no importa.
Fuente: https://logz.io/blog/elasticsearch-queries/
fuente