prefacio
Por la renuncia de un compañero en la empresa, necesito retomar el proyecto que originalmente estaba a cargo de él. Estos incluyen bancos de preguntas de escuelas primarias y secundarias y búsquedas de bancos de preguntas que contienen decenas de millones de datos. Para garantizar que la iteración normal de esta parte de la función se pueda completar de manera eficiente en el futuro. Tuve que comenzar a aprender el uso básico de Elasticsearch, lo que llevó a este registro de aprendizaje. Los estudiantes que no conocen esta herramienta también pueden obtener ayuda a través de este artículo.
Por favor confirme antes de leer:
- Entiendes lo que es una línea de comandos de Unix/Linux.
- Seguro que comprende qué es una solicitud de red y los conocimientos relacionados con tcp/udp, y ha implementado estas solicitudes de red en cualquier lenguaje de programación.
- Entiendes
curl
el uso de los comandos. - Usted comprende
get
yput
solicita, comprende REST y RESTful; puede consultar este artículo vinculado "¿ Qué es RESTFUL?" ¿Cuáles son los métodos de solicitud de REST y cuáles son las diferencias? ".
texto
Preparación ambiental
JDK8
Las herramientas de administración de paquetes, como yum, apt y brew, también se pueden descargar, compilar e instalar a través del código fuente o instalar a través de deb y .exe.
Descargue e inicie ES6
Soy un Mac, así que solo use brew para descargar directamente.
brew install elasticsearch
Una vez completada la descarga, ingrese el comando directamente para comenzar.
elasticsearch
uso de comandos
control del estado de salud
curl -XGET 'localhost:9200/_cat/health?v&pretty'
Los resultados de ejecución son los siguientes.
ver lista de nodos
curl -XGET 'localhost:9200/_cat/nodes?v&pretty'
ver lista de índice
Ejecute el siguiente comando.
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
Si no hay índice, habrá solo un encabezado de tabla, como se muestra a continuación.
Si hay un índice, tendrá el siguiente efecto.
crear índice
Para crear un índice llamado "test_index", puede iniciar la siguiente solicitud.
curl -XPUT 'localhost:9200/test_index&pretty'
Luego puede verificar y confirmar a través de "Ver lista de índice" arriba. El efecto de ejecución es el siguiente.
Agregar documento de documentación
id = 1
Inserte un documento en el índice "test_index" creado anteriormente , el contenido es el siguiente.
{
"content": "Test Data By Funco~~~"
}
Entonces la línea de comando es la siguiente.
curl -XPUT 'localhost:9200/test_index/doc/1?pretty&pretty' -H 'Content-Type: application/json' -d '{"content": "Test Data By Funco~~~"}'
Entonces el efecto de ejecución es el siguiente.
Aviso
- Si agrega un documento a un índice que no existe, se creará el índice y el documento se agregará correctamente.
- Si el comando se ejecuta repetidamente con la misma identificación, el documento anterior simplemente se reemplazará por el documento nuevo.
- El id no es obligatorio. Si no se especifica ningún id, es generará aleatoriamente un id como índice. Independientemente de si se especifica la identificación, la identificación se puede obtener en el resultado devuelto, como los campos en el diagrama de ejecución anterior
_id
.
obtener documentación
Obtenga el documento recién agregado aquí id = 1
.
curl -XGET 'localhost:9200/test_index/doc/1?pretty&pretty'
El efecto de ejecución es el siguiente.
eliminar índice
Anteriormente, mencionamos que si el índice seleccionado no existe al agregar un documento, se agregará el índice. Entonces, ¿qué pasa si queremos eliminar el índice agregado por error? Se pueden ejecutar los siguientes comandos. Por ejemplo, ahora queremos eliminar un customer
índice llamado .
curl -XDELETE 'localhost:9200/customer?pretty&pretty'
El efecto de ejecución es el siguiente, y después de que la ejecución sea exitosa, encontrará que el índice ya no existe en la lista a través del comando anterior para ver la lista de índices.
modificar documento
Justo ahora, en la sección "Agregar documentos", se menciona que el documento nuevo simplemente reemplazará al documento anterior, pero en este momento, ¿qué pasa si queremos modificar solo una parte del contenido en lugar de reemplazarlo?
Ahora supongamos que estamos en el índice test_index
, hay un documento con id = 1 de la siguiente manera.
curl -XPOST 'localhost:9200/test_index/doc/1/_update?pretty&pretty' -H 'Content-Type: application/json' -d '{"doc":{"author": "funco"}}'
El efecto de ejecución es el siguiente. Preste atención al uso de POST para enviar, y los campos -d
en doc
, compare el documento antes de la modificación, data
los parámetros enviados durante la modificación y el documento modificado, puede comprender.
eliminar documento
No hay nada que decir al respecto. Envíe la operación REST DELETE y especifique el documento al que apunta una identificación debajo del índice. Por ejemplo, quiero eliminar id = 1
el documento en test_index. Puede ejecutar los siguientes comandos.
curl -XDELETE 'localhost:9200/test_index/doc/1?pretty&pretty'
El efecto de ejecución es el siguiente. Se puede ver que después de eliminar, obtenga el documento nuevamente y el campo del resultado devuelto found
es false
.
procesamiento por lotes
Insertar documentos por lotes
curl -XPOST 'localhost:9200/test_index/doc/_bulk?pretty&pretty' -H 'Content-Type: application/json' -d '
{"index":{"_id": 2}}
{"content":"test content2"}
{"index":{"_id": 3}}
{"content":"test content3"}
'
El efecto de ejecución es el siguiente.
Eliminar y editar en bloque
En los siguientes casos, podemos aprender cómo eliminar datos y modificar datos, y realizar diferentes operaciones en una sola solicitud.
Primero, confirme la existencia deid = 2
registros antes de la ejecución.id = 3
Luego, ejecuta el siguiente comando.
curl -XPOST 'localhost:9200/test_index/doc/_bulk?pretty&pretty' -H 'Content-Type: application/json' -d '
{"update":{"_id": 2}}
{"doc":{"author":"funco"}}
{"delete":{"_id": 3}}
'
El efecto de ejecución es el siguiente.
Finalmente, verifíquelo nuevamente. Puede confirmar que la ejecución fue exitosa.
buscar
Tomando como ejemplo la sección anterior "Eliminación y modificación de lotes", antes y después de ejecutar la operación, solo podemos ejecutar dos solicitudes a los documentos con id = 2 e id = 3. ¿Qué pasa si queremos obtener todos los /<index>/doc/<id>
documentos GET
? Suponiendo que queremos obtener test_index
todos los documentos ahora, podemos ejecutar el siguiente comando.
curl -XGET 'localhost:9200/test_index/_search?q=*&pretty&pretty'
Incluso podemos agregar get
parámetros sort=_id:asc
para darnos cuenta de que los resultados de la búsqueda _id
se ordenan en orden ascendente por campo.
curl -XGET 'localhost:9200/test_index/_search?q=*&sort=_id:asc&pretty&pretty'
Cabe señalar que también podemos poner parámetros en datos como en la solicitud anterior. El efecto es el mismo que el del ejemplo anterior. Esto es útil para mantener un estilo de procesamiento consistente cuando usamos código para iniciar solicitudes.
curl -XGET 'localhost:9200/test_index/_search?pretty&pretty' -H 'Content-Type: application/json' -d '
{
"query": {"match_all":{}},
"sort": {"_id": "asc"}
}
'
El resultado de búsqueda predeterminado es 10. Si desea buscar más datos, debe
size
especificarlo a través de parámetros.En cuanto a la búsqueda, crearé otro blog para compartir.