Premiers pas avec le client Elastic Search NodeJs

Dec 25 2022
ES : Prérequis d'Elastic Search Dans nos articles précédents sur Elastic Search, nous avons découvert les bases d'Elastic Search, son fonctionnement et la création d'un nouvel index. Dans cet article, nous allons continuer à travailler avec le client Elastic Search NodeJS et découvrir comment indexer de nouveaux documents, mettre à jour des documents indexés existants et supprimer des documents indexés.

ES : recherche élastique

Conditions préalables

Qu'est-ce qu'Elastic Search ? Comment fonctionne Elastic Search ? Créer un nouvel index avec mappage et paramètres dans Elastic Search ?

Dans nos précédents articles sur Elastic Search, nous avons découvert les bases d'Elastic Search, son fonctionnement et la création d'un nouvel index. Dans cet article, nous allons continuer à travailler avec le client Elastic Search NodeJS et découvrir comment indexer de nouveaux documents, mettre à jour des documents indexés existants et supprimer des documents indexés. En comprenant ces fonctionnalités, nous pouvons utiliser plus efficacement Elastic Search pour gérer et mettre à jour les données de nos projets. Commençons et voyons comment ces fonctions fonctionnent en action.

Tous les exemples ci-dessous sont basés sur le client ES Node .

Installation

Vous pouvez utiliser le package npm Elastic Search dans votre application nodejs.

npm install @elastic/elasticsearch

Notre cluster ES est configuré avec la sécurité explicitement désactivée , c'est pourquoi nous pouvons nous connecter via HTTP.

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

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

Toutes les autres références liées à ES que vous pouvez obtenir ici .

Ping

Pour vérifier que le client ES est connecté au cluster http défini, effectuez une action 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: {}
  });
};

Vérifiez si l'index existe ou non.

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

Avant d'ajouter un document à indexer, il est recommandé de mettre à jour les paramètres d'indexation et d'ajouter les analyseurs requis en fonction de votre fonctionnalité de recherche. Voici un exemple de paramétrage d'index :

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',
      },
    }
  });
};

Ajouter des mappages

Avant d'ajouter un document à indexer, il est recommandé de mettre à jour les paramètres d'index, puis de mettre à jour les mappages d'index et d'attribuer des propriétés d'analyseur avec des champs. Voici un exemple de mappages d'index :

Comme lors de la mise à jour des paramètres, nous avons ajouté un autocompleteanalyseur que nous pouvons définir dans les mappages en tant que propriété de recherche. Le mappage d'index peut être différent pour différents index.

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' },
      },
    },
  });
};

Ajouter un document

Il existe différentes manières d'ajouter des documents dans un index :

Document unique

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
  });
};

Mettre à jour un seul document : met à jour un document avec un script ou un document partiel.

client.update(...)

client.updateByQuery(...)

Supprimer un seul document

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

Supprimer un seul document : met à jour un document avec un script ou un document partiel.

client.delete(...)

client.deleteByQuery(...)

Client JavaScript Elasticsearch [8.5] ​​| Élastique

Référence API | Client JavaScript Elasticsearch [8.5] ​​| Élastique

Exemples | Client JavaScript Elasticsearch [8.5] ​​| Élastique

Créer un analyseur personnalisé | Guide de recherche élastique [8.5] ​​| Élastique

Référence analyseur intégré | Guide de recherche élastique [8.5] ​​| Élastique

Types de données de champ | Guide de recherche élastique [8.5] ​​| Élastique

J'espère que vous avez apprécié la lecture d'Elastic Search et comment il peut être utilisé pour optimiser la recherche et l'analyse dans diverses applications. Si vous avez trouvé cet article utile ou si vous avez d'autres questions, n'hésitez pas à me contacter via les commentaires.

Pour plus de mises à jour et d'informations sur les dernières tendances technologiques, assurez-vous de me suivre sur Twitter ou LinkedIn . Merci d'avoir lu, et j'ai hâte de communiquer avec vous sur les réseaux sociaux.

Gazouillement :https://twitter.com/geekfarmer_

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