Comience con el cliente Elastic Search NodeJs

Dec 25 2022
ES: Requisitos previos de Elastic Search En nuestros artículos anteriores sobre Elastic Search, aprendimos sobre los conceptos básicos de Elastic Search, cómo funciona y cómo crear un nuevo índice. En este artículo, continuaremos trabajando con el cliente Elastic Search NodeJS y exploraremos cómo indexar documentos nuevos, actualizar documentos indexados existentes y eliminar documentos indexados.

ES: Búsqueda elástica

requisitos previos

¿Qué es la búsqueda elástica? ¿Cómo funciona la búsqueda elástica? ¿Crear un nuevo índice con mapeo y configuraciones en Elastic Search?

En nuestros artículos anteriores sobre Elastic Search, aprendimos sobre los conceptos básicos de Elastic Search, cómo funciona y cómo crear un nuevo índice. En este artículo, continuaremos trabajando con el cliente Elastic Search NodeJS y exploraremos cómo indexar documentos nuevos, actualizar documentos indexados existentes y eliminar documentos indexados. Al comprender estas características, podemos usar Elastic Search de manera más efectiva para administrar y actualizar los datos en nuestros proyectos. Comencemos y veamos cómo funcionan estas funciones en acción.

Todos los ejemplos a continuación se basan en el cliente ES Node .

Instalación

Puede usar el paquete npm Elastic Search en su aplicación nodejs.

npm install @elastic/elasticsearch

Nuestro clúster ES está configurado con la seguridad explícitamente deshabilitada , por eso podemos conectarnos a través de HTTP.

import { Client, errors } from '@elastic/elasticsearch';

const client = new Client({
  node: 'http://example.com'
});

Todas las demás referencias relacionadas con ES se pueden obtener aquí .

Silbido

Para comprobar que el cliente ES está conectado con un clúster http definido, realice una acción de ping.

client
  .ping({
    // ping usually has a 3000ms timeout
    requestTimeout: 1000,
  })
  .then(() => {
    this.logger.info('Elasticsearch connected');
  })
  .catch((err: errors.ConnectionError) => {
    this.logger.error('Elasticsearch unavailable', { error: err });
  });

async createIndex(indexName: string) {
  return this.client.indices.create({
    index: indexName,
    mappings: {},
    settings: {}
  });
};

Compruebe si el índice existe o no.

async indexExists(indexName: string) {
  return this.client.indices.exists({
    index: indexName,
  });
};

Antes de agregar cualquier documento al índice, se recomienda actualizar la configuración del índice y agregar los analizadores requeridos según su funcionalidad de búsqueda. Aquí hay un ejemplo de configuración de índice:

async indexSetting(indexName: string) {
  return this.client.indices.putSettings({
    index: indexName,
    body: {
      settings: {
        max_ngram_diff: 19,
        analysis: {
          filter: {
            autocomplete_filter: {
              type: 'ngram',
              min_gram: '1',
              max_gram: '20',
            },
          },
          analyzer: {
            autocomplete: {
              filter: ['lowercase', 'autocomplete_filter'],
              type: 'custom',
              tokenizer: 'standard',
            },
          },
        },
        number_of_replicas: '1',
      },
    }
  });
};

Agregar asignaciones

Antes de agregar cualquier documento al índice, se recomienda actualizar la configuración del índice, luego actualizar las asignaciones de índice y asignar propiedades del analizador con campos. Este es un ejemplo de asignaciones de índice:

Al actualizar la configuración, agregamos un autocompleteanalizador que podemos definir en las asignaciones como propiedad de búsqueda. El mapeo de índices puede ser diferente para diferentes índices.

const searchProperty = {
  type: 'text',
  analyzer: 'autocomplete',
  search_analyzer: 'standard',
};

async indexMapping(indexName: string) {
  return this.client.indices.putMapping({
    index: indexName,
    body: {
      properties: {
        id: { type: 'keyword' },
        createdAt: { type: 'date' },
        updatedAt: { type: 'date' },
        caseCode: searchProperty,
        policyNo: searchProperty,
        claimRegNo: searchProperty,
        vehicleRegNo: searchProperty,
        vehicleChassisNo: searchProperty,
        claimStatus: { type: 'keyword' },
        lossType: { type: 'keyword' },
        vehicleType: { type: 'keyword' },
        zone: { type: 'keyword' },
        insurer: { type: 'keyword' },
        caseStatus: { type: 'keyword' },
        business: { type: 'keyword' },
      },
    },
  });
};

Agregar documento

Existen diferentes formas de agregar documentos en un índice:

Documento único

async addDocument(indexName: string, payload: DataType) {
  return this.client.index({
    index: indexName,
    type: '_doc',
    id: payload.id,
    body: payload
  });
};

async addBulkDocuments(indexName: data = []) {
  const payload = data.map((item) => {
    return [
      {
        index: {
          _index: indexName,
          _type: '_doc',
          _id: item.id,
        },
      },
      item,
    ]
  })
  return this.client.bulk({
    refresh: true,
    body: payload
  });
};

async updateDocument(indexName: string, payload: DataType) {
  return this.client.update({
    index: indexName,
    type: '_doc',
    id: payload.id,
    body: payload
  });
};

Actualizar documento único: actualiza un documento con un guión o un documento parcial.

client.update(...)

client.updateByQuery(...)

Eliminar un solo documento

async deleteDocument(indexName: string, id: string) {
  return this.client.delete({
    index: indexName,
    id,
  });
};

Eliminar documento único: actualiza un documento con un guión o un documento parcial.

client.delete(...)

client.deleteByQuery(...)

Cliente JavaScript de Elasticsearch [8.5] ​​| Elástico

Referencia de la API | Cliente JavaScript de Elasticsearch [8.5] ​​| Elástico

Ejemplos | Cliente JavaScript de Elasticsearch [8.5] ​​| Elástico

Crear un analizador personalizado | Guía de búsqueda elástica [8.5] ​​| Elástico

Referencia del analizador incorporado | Guía de búsqueda elástica [8.5] ​​| Elástico

Tipos de datos de campo | Guía de búsqueda elástica [8.5] ​​| Elástico

Espero que haya disfrutado leyendo sobre Elastic Search y cómo se puede usar para optimizar la búsqueda y el análisis en varias aplicaciones. Si este artículo le resultó útil o tiene más preguntas, no dude en comunicarse conmigo a través de los comentarios.

Para obtener más actualizaciones e información sobre las últimas tendencias tecnológicas, asegúrese de seguirme en Twitter o LinkedIn . Gracias por leer, y espero conectarme con usted en las redes sociales.

Gorjeo :https://twitter.com/geekfarmer_

Linkedin :https://www.linkedin.com/in/geekfarmer