Memulai dengan Klien Pencarian Elastis NodeJs

Dec 25 2022
ES: Prasyarat Pencarian Elastis Dalam artikel kami sebelumnya tentang Pencarian Elastis, kami belajar tentang dasar-dasar Pencarian Elastis, cara kerjanya, dan cara membuat indeks baru. Pada artikel ini, kami akan terus bekerja dengan klien Elastic Search NodeJS dan menjelajahi cara mengindeks dokumen baru, memperbarui dokumen yang sudah diindeks, dan menghapus dokumen yang diindeks.

ES: Pencarian Elastis

Prasyarat

Apa itu Pencarian Elastis? Bagaimana Pencarian Elastis Bekerja? Buat Indeks baru dengan pemetaan dan pengaturan di Pencarian Elastis?

Dalam artikel kami sebelumnya tentang Pencarian Elastis, kami belajar tentang dasar-dasar Pencarian Elastis, cara kerjanya, dan cara membuat indeks baru. Pada artikel ini, kami akan terus bekerja dengan klien Elastic Search NodeJS dan menjelajahi cara mengindeks dokumen baru, memperbarui dokumen yang sudah diindeks, dan menghapus dokumen yang diindeks. Dengan memahami fitur-fitur ini, kami dapat menggunakan Pencarian Elastis secara lebih efektif untuk mengelola dan memperbarui data dalam proyek kami. Mari kita mulai dan lihat bagaimana fungsi ini bekerja.

Semua contoh di bawah ini didasarkan pada klien ES Node .

Instalasi

Anda dapat menggunakan paket Pencarian Elastis npm di aplikasi nodejs Anda.

npm install @elastic/elasticsearch

Kluster ES kami dikonfigurasi dengan keamanan yang dinonaktifkan secara eksplisit , itulah sebabnya kami dapat terhubung melalui HTTP.

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

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

Semua referensi terkait ES lainnya bisa Anda dapatkan di sini .

Ping

Untuk memeriksa klien ES terhubung dengan kluster http yang ditentukan, lakukan tindakan 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: {}
  });
};

Periksa apakah indeks ada atau tidak.

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

Sebelum menambahkan dokumen apa pun untuk diindeks, sebaiknya perbarui pengaturan indeks dan tambahkan penganalisis yang diperlukan berdasarkan fungsi pencarian Anda. Berikut adalah contoh pengaturan indeks:

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

Tambahkan Pemetaan

Sebelum menambahkan dokumen apa pun ke indeks, sebaiknya perbarui setelan indeks, lalu perbarui pemetaan indeks, dan tetapkan properti penganalisis dengan bidang. Berikut adalah contoh pemetaan indeks:

Saat memperbarui pengaturan, kami menambahkan autocompletepenganalisa yang dapat kami tentukan dalam pemetaan sebagai properti pencarian. Pemetaan indeks dapat berbeda untuk indeks yang berbeda.

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

Tambahkan dokumen

Ada berbagai cara untuk menambahkan dokumen dalam indeks:

Dokumen Tunggal

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

Perbarui Dokumen Tunggal: Memperbarui dokumen dengan skrip atau sebagian dokumen.

client.update(...)

client.updateByQuery(...)

Hapus satu dokumen

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

Hapus Dokumen Tunggal: Memperbarui dokumen dengan skrip atau sebagian dokumen.

client.delete(...)

client.deleteByQuery(...)

Klien JavaScript Elasticsearch [8.5] ​​| Elastis

Referensi API | Klien JavaScript Elasticsearch [8.5] ​​| Elastis

Contoh | Klien JavaScript Elasticsearch [8.5] ​​| Elastis

Buat penganalisa khusus | Panduan Elasticsearch [8.5] ​​| Elastis

Referensi penganalisa bawaan | Panduan Elasticsearch [8.5] ​​| Elastis

Jenis data bidang | Panduan Elasticsearch [8.5] ​​| Elastis

Saya harap Anda menikmati membaca tentang Pencarian Elastis dan bagaimana itu dapat digunakan untuk mengoptimalkan pencarian dan analisis di berbagai aplikasi. Jika Anda menemukan artikel ini bermanfaat atau memiliki pertanyaan lebih lanjut, jangan ragu untuk menghubungi saya melalui komentar.

Untuk pembaruan dan wawasan lebih lanjut tentang tren teknologi terbaru, pastikan untuk mengikuti saya di Twitter atau LinkedIn . Terima kasih telah membaca, dan saya berharap dapat terhubung dengan Anda di media sosial.

Twitter :https://twitter.com/geekfarmer_

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