Inizia con Elastic Search NodeJs Client

Dec 25 2022
ES: prerequisiti di Elastic Search Nei nostri precedenti articoli su Elastic Search, abbiamo appreso le basi di Elastic Search, come funziona e come creare un nuovo indice. In questo articolo, continueremo a lavorare con il client Elastic Search NodeJS ed esploreremo come indicizzare nuovi documenti, aggiornare documenti indicizzati esistenti ed eliminare documenti indicizzati.

ES: ricerca elastica

Prerequisiti

Che cos'è la ricerca elastica? Come funziona la ricerca elastica? Creare un nuovo indice con mappatura e impostazioni in Elastic Search?

Nei nostri precedenti articoli su Elastic Search, abbiamo appreso le basi di Elastic Search, come funziona e come creare un nuovo indice. In questo articolo, continueremo a lavorare con il client Elastic Search NodeJS ed esploreremo come indicizzare nuovi documenti, aggiornare documenti indicizzati esistenti ed eliminare documenti indicizzati. Comprendendo queste funzionalità, possiamo utilizzare in modo più efficace Elastic Search per gestire e aggiornare i dati nei nostri progetti. Cominciamo e vediamo come funzionano queste funzioni in azione.

Tutti gli esempi seguenti sono basati sul client ES Node .

Installazione

Puoi utilizzare il pacchetto npm Elastic Search nella tua applicazione nodejs.

npm install @elastic/elasticsearch

Il nostro cluster ES è configurato con la sicurezza esplicitamente disabilitata , ecco perché possiamo connetterci tramite HTTP.

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

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

Tutti gli altri riferimenti relativi a ES sono disponibili qui .

Ping

Per verificare che il client ES sia connesso al cluster http definito, eseguire l'azione 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: {}
  });
};

Controlla se l'indice esiste o meno.

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

Prima di aggiungere qualsiasi documento all'indice, si consiglia di aggiornare le impostazioni dell'indice e aggiungere gli analizzatori richiesti in base alla funzionalità di ricerca. Ecco un esempio di impostazione dell'indice:

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

Aggiungi mappature

Prima di aggiungere qualsiasi documento all'indice, si consiglia di aggiornare le impostazioni dell'indice, quindi aggiornare le mappature dell'indice e assegnare le proprietà dell'analizzatore con i campi. Di seguito è riportato un esempio di mapping degli indici:

Come durante l'aggiornamento delle impostazioni, abbiamo aggiunto autocompletel'analizzatore che possiamo definire nelle mappature come proprietà di ricerca. La mappatura dell'indice può essere diversa per indici diversi.

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

Aggiungi documento

Esistono diversi modi per aggiungere documenti in un indice:

Unico documento

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

Aggiorna documento singolo: aggiorna un documento con uno script o un documento parziale.

client.update(...)

client.updateByQuery(...)

Elimina un singolo documento

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

Elimina documento singolo: aggiorna un documento con uno script o un documento parziale.

client.delete(...)

client.deleteByQuery(...)

Client JavaScript Elasticsearch [8.5] ​​| Elastico

Riferimento API | Client JavaScript Elasticsearch [8.5] ​​| Elastico

Esempi | Client JavaScript Elasticsearch [8.5] ​​| Elastico

Crea un analizzatore personalizzato | Guida Elasticsearch [8.5] ​​| Elastico

Riferimento analizzatore integrato | Guida Elasticsearch [8.5] ​​| Elastico

Tipi di dati di campo | Guida Elasticsearch [8.5] ​​| Elastico

Spero ti sia piaciuto leggere su Elastic Search e su come può essere utilizzato per ottimizzare la ricerca e l'analisi in varie applicazioni. Se hai trovato utile questo articolo o hai ulteriori domande, non esitare a contattarmi tramite i commenti.

Per ulteriori aggiornamenti e approfondimenti sulle ultime tendenze tecnologiche, assicurati di seguirmi su Twitter o LinkedIn . Grazie per aver letto e non vedo l'ora di connettermi con voi sui social media.

Cinguettio :https://twitter.com/geekfarmer_

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