Elastic Search NodeJs İstemcisini Kullanmaya Başlayın

Dec 25 2022
ES: Elastic Search Ön Koşulları Elastic Search ile ilgili önceki yazılarımızda, Elastic Search'ün temellerini, nasıl çalıştığını ve yeni bir dizin oluşturmayı öğrenmiştik. Bu yazıda, Elastic Search NodeJS istemcisi ile çalışmaya devam edeceğiz ve yeni dokümanların nasıl indeksleneceğini, indekslenmiş mevcut dokümanların nasıl güncelleneceğini ve indekslenmiş dokümanların nasıl silineceğini keşfedeceğiz.

ES: Esnek Arama

Önkoşullar

Esnek Arama Nedir? Esnek Arama Nasıl Çalışır? Elastic Search'te eşleme ve ayarlarla yeni bir Dizin oluşturulsun mu?

Elastic Search ile ilgili önceki yazılarımızda Elastic Search'ün temellerini, nasıl çalıştığını ve yeni bir indeksin nasıl oluşturulacağını öğrenmiştik. Bu yazıda, Elastic Search NodeJS istemcisi ile çalışmaya devam edeceğiz ve yeni dokümanların nasıl indeksleneceğini, indekslenmiş mevcut dokümanların nasıl güncelleneceğini ve indekslenmiş dokümanların nasıl silineceğini keşfedeceğiz. Bu özellikleri anlayarak, projelerimizdeki verileri yönetmek ve güncellemek için Elastic Search'ü daha etkin bir şekilde kullanabiliriz. Başlayalım ve bu işlevlerin nasıl çalıştığını görelim.

Aşağıdaki tüm örnekler ES Node istemcisine dayanmaktadır .

Kurulum

npm Elastic Search paketini nodejs uygulamanızda kullanabilirsiniz.

npm install @elastic/elasticsearch

ES kümemiz, güvenlik açıkça devre dışı bırakılmış olarak yapılandırılmıştır, bu nedenle HTTP yoluyla bağlanabiliyoruz.

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

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

ES ile ilgili diğer tüm referanslara buradan ulaşabilirsiniz .

ping

ES istemcisinin tanımlı http kümesine bağlı olup olmadığını kontrol etmek için ping eylemi gerçekleştirin.

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

Dizinin var olup olmadığını kontrol edin.

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

Herhangi bir belgeyi dizine eklemeden önce, dizin ayarlarını güncellemeniz ve arama işlevinize göre gerekli çözümleyicileri eklemeniz önerilir. İşte bir dizin ayarı örneği:

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

Eşleme Ekle

Herhangi bir belgeyi dizine eklemeden önce, dizin ayarlarını güncellemeniz, ardından dizin eşlemelerini güncellemeniz ve alanlarla çözümleyici özelliklerini atamanız önerilir. Dizin eşlemelerine bir örnek:

autocompleteAyarları güncellerken eşlemelerde tanımlayabileceğimiz analizörü search özelliği olarak ekledik . İndeks eşleme, farklı indeksler için farklı olabilir.

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

Belge ekle

Bir dizine belge eklemenin farklı yolları vardır:

Tek Belge

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

Tek Belgeyi Güncelle: Bir belgeyi komut dosyasıyla veya kısmi belgeyle günceller.

client.update(...)

client.updateByQuery(...)

Tek bir belgeyi silin

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

Tek Belgeyi Sil: Bir belgeyi komut dosyasıyla veya kısmi belgeyle günceller.

client.delete(...)

client.deleteByQuery(...)

Elasticsearch JavaScript İstemcisi [8.5] ​​| Elastik

API Referansı | Elasticsearch JavaScript İstemcisi [8.5] ​​| Elastik

örnekler | Elasticsearch JavaScript İstemcisi [8.5] ​​| Elastik

Özel bir analizör oluşturun | Elasticsearch Kılavuzu [8.5] ​​| Elastik

Yerleşik analizör referansı | Elasticsearch Kılavuzu [8.5] ​​| Elastik

Alan veri türleri | Elasticsearch Kılavuzu [8.5] ​​| Elastik

Elastic Search'ü ve çeşitli uygulamalarda arama ve analizi optimize etmek için nasıl kullanılabileceğini umarım okumaktan keyif almışsınızdır. Bu makaleyi yararlı bulduysanız veya başka sorularınız varsa, lütfen yorumlar aracılığıyla bana ulaşmaktan çekinmeyin.

En son teknoloji trendleri hakkında daha fazla güncelleme ve içgörü için beni Twitter veya LinkedIn'de takip ettiğinizden emin olun . Okuduğunuz için teşekkürler ve sizinle sosyal medyada bağlantı kurmak için sabırsızlanıyorum.

twitter :https://twitter.com/geekfarmer_

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