Elasticsearch: Crea tu primera consulta de búsqueda con Python

Visión general

Introducción a Elasticsearch

Elasticsearch ofrece una variedad de técnicas de búsqueda, comenzando con BM25, el estándar de la industria para la búsqueda textual. También ofrece búsqueda semántica impulsada por modelos de AI, lo que mejora los resultados según el contexto y la intención.

Elasticsearch ofrece clientes oficiales para varios lenguajes de programación, incluidos Python, Rust, Java, JavaScript y otros. Estos clientes brindan soporte completo de API para indexación, búsqueda y administración de clusters. Están optimizados para el rendimiento y se mantienen actualizados con las versiones de Elasticsearch, lo que garantiza compatibilidad y seguridad.


Comencemos

En este ejemplo, indexarás una cierta cantidad de documentos y los consultarás mediante Python. Al final de esta guía, habrás aprendido a conectar una aplicación de backend a elasticsearch para que responda a tus consultas.

Crear un proyecto de Elastic Cloud

Comienza con una prueba de 14 días. Después de que accedas y crees una cuenta, sigue los pasos a continuación para aprender cómo lanzar tu primer proyecto de Elasticsearch Serverless. Selecciona Elasticsearch.

screenshot-which-type-of-project-would-you-like-to-create.png

Luego crea un General purpose (Propósito general), asígnale un nombre como My Project (Mi proyecto) y créalo.

elasticsearch general purpose.png

Vamos a crear nuestro primer índice Elasticsearch, podemos llamarlo my-index. Selecciona Crear mi índice.

screenshot-get-started-with-elasticsearch.png

¡Creaste tu primer índice! A continuación, crea una clave de API para que tu aplicación pueda comunicarse con Elasticsearch. Selecciona tu idioma preferido. Para este ejemplo, aprovecha Python.

screenshot-my-index.png

Primeros pasos para introducir datos en Elasticsearch

En tu terminal, instala el cliente de Elasticsearch usando pip:

pip install elasticsearch

Copia tu clave de API desde la esquina superior derecha y agrégala a la configuración del cliente junto con la URL del proyecto. Ya podemos crear los mappings para nuestro índice, el cual tendrá solo un campo de texto llamado creativamente “texto”.

from elasticsearch import Elasticsearch

client = Elasticsearch(
"https://my-project-bff300.es.us-east-1.aws.elastic.cloud:443",
api_key="YOUR-API-KEY"
)

index_name = "my-index"

mappings = {
"properties": {
"text": {
"type": "text"
}
}
}

mapping_response = client.indices.put_mapping(index=index_name, body=mappings)
print(mapping_response)

Luego finalmente podemos usar solicitudes en masa para enviar datos a Elasticsearch. Vamos a indexar 3 documentos con una solicitud _bulk. Recuerda usar solicitudes en masa al indexar cientos a miles de millones de documentos también, ya que esta es la opción preferida al indexar grandes cantidades de documentos en Elasticsearch.

docs = [
{
"text": "Yellowstone National Park is one of the largest national parks in the United States. It ranges from the Wyoming to Montana and Idaho, and contains an area of 2,219,791 acress across three different states. Its most famous for hosting the geyser Old Faithful and is centered on the Yellowstone Caldera, the largest super volcano on the American continent. Yellowstone is host to hundreds of species of animal, many of which are endangered or threatened. Most notably, it contains free-ranging herds of bison and elk, alongside bears, cougars and wolves. The national park receives over 4.5 million visitors annually and is a UNESCO World Heritage Site."
},
{
"text": "Yosemite National Park is a United States National Park, covering over 750,000 acres of land in California. A UNESCO World Heritage Site, the park is best known for its granite cliffs, waterfalls and giant sequoia trees. Yosemite hosts over four million visitors in most years, with a peak of five million visitors in 2016. The park is home to a diverse range of wildlife, including mule deer, black bears, and the endangered Sierra Nevada bighorn sheep. The park has 1,200 square miles of wilderness, and is a popular destination for rock climbers, with over 3,000 feet of vertical granite to climb. Its most famous and cliff is the El Capitan, a 3,000 feet monolith along its tallest face."
},
{
"text": "Rocky Mountain National Park is one of the most popular national parks in the United States. It receives over 4.5 million visitors annually, and is known for its mountainous terrain, including Longs Peak, which is the highest peak in the park. The park is home to a variety of wildlife, including elk, mule deer, moose, and bighorn sheep. The park is also home to a variety of ecosystems, including montane, subalpine, and alpine tundra. The park is a popular destination for hiking, camping, and wildlife viewing, and is a UNESCO World Heritage Site."
}
]

bulk_response = helpers.bulk(client, docs, index=index_name)
print(bulk_response)

Deberías poder ver los documentos en Elasticsearch.

view docs in elasticsearch.png


Trabajar con Elasticsearch

Crear tu búsqueda

Crea un nuevo script (por ejemplo, search.py), que define una consulta y ejecuta la siguiente solicitud de búsqueda:

FROM my-index
| WHERE MATCH(text, "yosemite")
| LIMIT 5

Agrega esta consulta dentro de client.esql.query:

from elasticsearch import Elasticsearch

client = Elasticsearch(
"https://my-project-bff307.es.us-east-1.aws.elastic.cloud:443",
api_key="YOUR-API-KEY"
)

# Execute the search query
response = client.esql.query(
query="""
FROM my-index
| WHERE MATCH(text, "yosemite")
| LIMIT 5
""",
format="csv"
)

print(response)

Verifica tu resultado:

“El Parque Nacional Yosemite es un parque nacional de Estados Unidos, que abarca más de 750 000 acres de terreno en California. El parque, que fue declarado Patrimonio de la Humanidad por la UNESCO, es conocido por sus acantilados de granito, cascadas y secuoyas gigantes. Yosemite recibe más de cuatro millones de visitantes la mayoría de los años, con un pico de cinco millones de visitantes en 2016. El parque alberga una diversa variedad de fauna, incluyendo ciervos mulos, osos negros y la oveja cimarrona de Sierra Nevada, una especie en peligro de extinción. El parque tiene 1200 millas cuadradas de naturaleza salvaje, y es un destino popular para los escaladores de roca, ya que cuenta con más de 3000 pies de granito vertical para escalar. Su acantilado más famoso es El Capitán, un monolito de 3000 pies de altura en su cara más alta”.

Ahora estás listo para usar el cliente para consultar Elasticsearch desde cualquier backend de Python como Flask, Django, etc. Echa un vistazo a la documentación del Cliente de Elasticsearch para Python para explorar más a fondo.


Pasos siguientes

Gracias por tomarte el tiempo de configurar la búsqueda semántica para tus datos con Elastic Cloud. A medida que inicias tu trayectoria con Elastic, debes comprender algunos componentes operativos, de seguridad y de datos que deberías gestionar como usuario al desplegar en todo el entorno.

¿Listo para comenzar? Activa una prueba gratuita de 14 días en Elastic Cloud o prueba estos 15 minutos de aprendizaje práctico sobre El ABC de Search AI.

Inicia la prueba gratis