El martes pasado se publicó la versión 7.13.0 de Elastic: Las mejoras clave incluyen búsqueda con buena relación costo-efectividad en más datos a través de snapshots buscables y el nivel congelado, mejoras de datos impulsados por analistas sobre la marcha con campos de tiempo de ejecución y más integraciones con Microsoft (muchos más detalles en el enlace). Como en cada nueva versión del Stack, esto significó también que en mi equipo publicamos los clientes oficiales para Elasticsearch y Elastic Enterprise Search.

Clientes Elasticsearch

Tenemos clientes oficiales para Elasticsearch en Ruby, Python, PHP, Perl, JavaScript, .NET, Rust, Go y Java. Soportamos todas las APIs de Elasticsearch y tenemos todo un sistema de testeo contra la especificación lo que nos asegura compatibilidad completa. La mayoría de los clientes ya están disponibles en la versión 7.13.0 en sus respectivos sistemas de dependencias e instalación de paquetes. Pueden leer más sobre los clientes en este enlace.

Elastic 7.13.0

Clientes Enterprise Search

El proyecto de Elastic Enterprise Search empezó con los clientes Ruby y Python, y de a poco se irán sumando más lenguajes. Una de las novedades de la versión 7.13.0 es que se publica la primera versión estable del cliente Elastic Enterprise Search para PHP. Ha sido genial trabajar en equipo con mis compañeros del equipo de Clientes y el equipo Enterprise Search. La suerte que tuve de terminar en este trabajo es algo que no doy por sentado. Tenemos un equipo políglota trabajando en código abierto en tecnologías interesantes y con gente que sabe muchísimo y es muy buena gente.

En el post Elastic Enterprise Search – cliente oficial en Ruby explico más qué son Elastic Enterprise Search, Workplace Search y App Search, así como detalles de la implementación del cliente en Ruby.

En cuanto a las novedades técnicas, hay varias cosas nuevas interesantes en la API 7.13.0 de Enterprise Search, particularmente en lo que respecta a Workplace Search:

Nuevos métodos de autenticación en Workplace Search

El sistema soporta autenticación Básica HTTP y autenticación a través de tokens Elasticsearch a partir de esta versión. La API también, así que el cliente lo soporta también. Todos los APIs de Workplace Search soportan ambos métodos de autenticación y tokens de administración de Workplace Search (la autenticación que se podían usar hasta ahora), pero todavía necesitamos pasar por el proceso de OAuth para Búsqueda y Analítica.

El código funciona así:

host = 'https://id.ent-search.europe-west2.gcp.elastic-cloud.com'
basic_auth = { user: 'enterprise_search', password: 'changeme' }
 
workplace_search_client = Elastic::EnterpriseSearch::WorkplaceSearch::Client.new(
  host: host,
  http_auth: basic_auth
)

Y en el caso de tokens, en vez de un hash con usuario y contraseña, pasamos un String con el token ya sea en la inicialización o seteándolo como propiedad.

Nuevas APIs

Particularmente interesantes las APIs que nos permiten gestionar fuentes de contenido “content sources”. Workplace Search funciona en base a fuentes de contenido que se unen en una misma experiencia de búsqueda, y ahora podemos integrar una fuente nueva desde nuestro código Ruby. Si tenemos las credenciales de autenticación básica HTTP, ya no necesitamos crear las fuentes de contenido desde la interfaz web:

  • document: Obtener un documento por ID de una fuente de contenido específica.
  • delete_all_documents: Elimina todos los documentos de una fuente dada.
  • content_source: Obtiene una fuente de contenido por ID
  • create_content_source: Crea una fuente.
  • delete_content_source: Elimina una fuente por ID.
  • list_content_sources: Lista todas las fuentes.
  • put_content_source: Actualiza una fuente de contenidos.

Un ejemplo de código:

# Crear una fuente de contenido:
client.create_content_source(name: 'picando-codigo')
 
# Obtener una fuente de contenido por ID:
content_source_id = client.create_content_source(name: 'libros').body['id']
client.content_source(content_source_id)
 
# Eliminar una fuente de contenido por ID:
client.delete_content_source(content_source_id)
 
# Obtener una lista de todas las fuentes de contenido:
client.list_content_sources
 
# Actualizar una fuente de contenido:
body = {
  name: new_name,
  schema: { title: 'text', body: 'text', url: 'text' },
  display: { title_field: 'title', url_field: 'url', color: '#f00f00' },
  is_searchable: true
}
client.put_content_source(id, body: body)

La verdad ambos productos se están poniendo cada vez mejor, y hay mucha cosa nueva e interesante en el horizonte para futuras versiones!
Si tienen cualquier duda sobre el cliente para Elasticsearch o Elastic Enterprise Search, estoy a las órdenes para intentar ayudar 🙂

No hay comentarios en este post

Feed de comentarios

Dejar un comentario

Notificarme los nuevos comentarios por correo electrónico. Tambien puedes suscribirte sin comentar.

Toasty!