Este
tutorial es una explicación breve sobre cómo escribir consultas en Kibana, en
la barra de búsqueda en la parte superior, o en Elasticsearch, utilizando la
consulta de cadena de consulta. El lenguaje de consulta utilizado es en
realidad el lenguaje de consulta de Apache
Lucene, ya que es Lucene el motor
utilizado en Elasticsearch para
indexar datos.
Comprender
cómo se indexan sus datos en Elasticsearch influye en gran medida en qué y cómo
puede buscar con sus consultas. Por eso esta no solo será otra entrada del
Lucene query parser.
Por lo
tanto, el tema de este tutorial no es solo explicar el lenguaje de consulta,
sino también explicar por qué puede o no encontrar sus documentos almacenados
en Elasticsearch.
Indexación de documentos
Primero, es
crucial entender cómo Elasticsearch indexa los datos. Por lo tanto, ponemos los
siguientes dos documentos en nuestra instancia de Elasticsearch.
:
{
"title": "Lord
Jim",
"author":
"Joseph Conrad"
}
{
"title": "The
Last Command",
"author": "Timothy Zahn"
}
{
"title": "Heart
of Darkness",
"author": "Joseph
Conrad"
}
Si no cambiamos nada en las asignaciones de Elasticsearch para ese índice, Elasticsearch detectará automáticamente la cadena como el tipo de ambos campos al insertar el primer documento.
¿Qué hace un analizador?
Un analizador
tiene varios tokenizadores y / o filtros adjuntos. El tokenizer obtendrá el
valor del campo que se debe indexar (por ejemplo, "The Heart of Darkness") y puede dividir el valor en varios fragmentos que el
usuario debería poder buscar (más en un momento). Los filtros de un analizador
pueden transformar o filtrar tokens que produce el tokenizador.
Todas las
fichas resultantes se almacenarán en un llamado índice invertido. Ese índice
contendrá todos los tokens producidos por el analizador y un enlace a cuál de
los documentos los contenían.
Por lo
tanto, si el usuario presenta Elasticsearch con una palabra de búsqueda, solo
tiene que buscarlo en el índice invertido y verá instantáneamente qué
documentos debe devolver. Dado que no especificamos ninguna asignación para
nuestro índice de Elasticsearch, los campos de la cadena de tipo se analizarán
con el Analizador Estándar de forma predeterminada.
Este
analizador dividirá primero el valor del campo en palabras (utilizará
caracteres de espacio y puntuación como límites) y luego utilizará un filtro
para transformar todas las fichas en minúsculas. Después de insertar los dos
documentos anteriores, el índice invertido para el campo de título se vería de
la siguiente manera, con 1 que se refiere al primer documento “Lord Jim”, 2 al
segundo. "The Last Command" y 3 al tercero que se refieren al "The
heart of Darkness":
Término
|
Documento
|
lord
|
1
|
jim
|
1
|
the
|
2,3
|
last
|
2
|
command
|
2
|
heart
|
3
|
of
|
3
|
darkness
|
3
|
También se
creará un índice invertido para el campo de autor. Este contendrá cuatro
entradas: una para “Timothy”, otra para “Zahn”
una para "Joseph" y otra para "Conrad" que están vinculadas
a ambos documentos.
Ese índice
invertido ahora permite a Elasticsearch buscar rápidamente qué documentos
devolver para una búsqueda si el usuario busca "guía". Además, los
Términos-Agregación en Elasticsearch / Kibana solo analizan ese índice invertido
y devuelven los términos que tienen los documentos más / menos (según el orden
especificado por el usuario) adjuntos.
Mapeos en Elasticsearch
Si inserta
datos en elasticsearch, eso no es realmente texto, pero, por ejemplo, una URL o
similar que el análisis predeterminado no tiene mucho sentido. Especialmente si
va a visualizar sus datos con Kibana, no desea que un gráfico de las URL más
visitadas contenga una entrada para "http" y la ruta de acceso se
divide en cada barra. Le gustaría tener una entrada por dominio real. Lo que
desea es que Elasticsearch no analice los valores de sus documentos.
Por lo
tanto, debe definir una asignación para su índice manualmente. Esto no está
cubierto en ese tutorial, pero eche un vistazo a la documentación oficial. Si específica
“index: not_analyzed“ en el mapeo, el índice invertido para el campo del título
se vería de la siguiente manera:
Término
|
Documento
|
Lord Jim
|
1
|
The Last Commnad
|
2
|
The heart
of darkness
|
3
|
Y el índice invertido del campo de autor ahora se vería así.
Término
|
Documento
|
Joseph Conrad
|
1,3
|
Timothy
Zahn
|
2
|
Como ves, Elasticsearch ya no divide los valores y tampoco los transforma en minúsculas. Ya sea que sus valores sean analizados o no (es decir, qué términos están en el índice invertido) tienen un gran impacto en qué y cómo puede buscar, como veremos en las siguientes secciones.
Cuando
hablamos de los "datos analizados", esto significa que tiene los
datos en los campos de cadena analizados. Cuando hablamos de "datos no
analizados", esto significa que usted tiene una asignación que tiene ambos
campos como no analizados.
Ahora
explicaremos cómo Elasticsearch indexa los datos, podemos continuar con el tema
real: la búsqueda.
Las
siguientes consultas siempre se pueden usar en Kibana en la parte superior de
la pestaña Descubrir, su visualización y / o paneles de control. Además, estas
consultas se pueden usar en la consulta de cadena de consulta cuando se habla
directamente con Elasticsearch.
Empecemos
con el autor de la consulta bastante simple: joseph. Si ingresa esta consulta
en el conjunto de datos analizado, Elasticsearch devolverá ambos documentos.
¿Por qué? Buscará el término "joseph" en el índice invertido para el
campo del autor. Está allí enlazando a ambos documentos, por lo que
Elasticsearch devolverá esos dos documentos como resultados.
Si utilizará
la misma búsqueda en el conjunto de datos no analizados, no obtendrá ningún
resultado. ¿Por qué? Elasticsearch busca de nuevo "joseph" en el
índice invertido. No hay ninguna entrada para solo "joseph" como
término (solo para "Joseph Conrad"), por lo que no devolverá ningún
resultado.
Si intenta
buscar el autor: Conrard (primera letra en mayúscula) en los datos analizados,
obtendrá como resultado ambos documentos. ¿Por qué? Debido a que Elasticsearch
reconoce que el campo del autor ha sido analizado e intenta aplicar el mismo
analizador a su consulta de búsqueda "Conrad", significa que también
se transformará en minúsculas antes de que se busque en el índice invertido.
Por eso sigue encontrando los documentos. La misma consulta en datos no
analizados aún no producirá ningún resultado, ya que no hay ninguna entrada
para "Joseph" (solo para "Joseph Conrad").
No hay comentarios:
Publicar un comentario
Por favor deja tu comentario, es valioso.