Rozpocznij pracę z klientem Elastic Search NodeJs
ES: Wyszukiwanie elastyczne
Wymagania wstępne
Co to jest elastyczne wyszukiwanie? Jak działa elastyczne wyszukiwanie? Utworzyć nowy indeks z mapowaniem i ustawieniami w Elastic Search?W naszych poprzednich artykułach na temat Elastic Search dowiedzieliśmy się o podstawach Elastic Search, o tym, jak działa i jak utworzyć nowy indeks. W tym artykule będziemy kontynuować pracę z klientem Elastic Search NodeJS i zbadać, jak indeksować nowe dokumenty, aktualizować istniejące indeksowane dokumenty i usuwać zindeksowane dokumenty. Dzięki zrozumieniu tych funkcji możemy efektywniej wykorzystywać Elastic Search do zarządzania i aktualizowania danych w naszych projektach. Zacznijmy i zobaczmy, jak te funkcje działają w akcji.
Wszystkie poniższe przykłady są oparte na kliencie ES Node .
Instalacja
Możesz użyć pakietu npm Elastic Search w swojej aplikacji nodejs.
npm install @elastic/elasticsearch
Nasz klaster ES jest skonfigurowany z jawnie wyłączonymi zabezpieczeniami , dlatego możemy łączyć się przez HTTP.
import { Client, errors } from '@elastic/elasticsearch';
const client = new Client({
node: 'http://example.com'
});
Wszystkie inne odniesienia związane z ES można znaleźć tutaj .
Świst
Aby sprawdzić, czy klient ES jest połączony ze zdefiniowanym klastrem http, wykonaj akcję 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: {}
});
};
Sprawdź, czy indeks istnieje, czy nie.
async indexExists(indexName: string) {
return this.client.indices.exists({
index: indexName,
});
};
Przed dodaniem jakiegokolwiek dokumentu do indeksu zaleca się zaktualizowanie ustawień indeksu i dodanie wymaganych analizatorów na podstawie funkcji wyszukiwania. Oto przykład ustawienia indeksu:
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',
},
}
});
};
Dodaj mapowania
Przed dodaniem jakiegokolwiek dokumentu do indeksu zaleca się aktualizację ustawień indeksu, a następnie zaktualizowanie mapowań indeksów i przypisanie właściwości analizatora do pól. Oto przykład mapowania indeksu:
Podobnie jak podczas aktualizacji ustawień, dodaliśmy autocompleteanalizator, który możemy zdefiniować w mapowaniach jako właściwość wyszukiwania. Mapowanie indeksu może być różne dla różnych indeksów.
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' },
},
},
});
};
Dodaj dokument
Istnieją różne sposoby dodawania dokumentów do indeksu:
Pojedynczy dokument
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
});
};
Aktualizuj pojedynczy dokument: Aktualizuje dokument za pomocą skryptu lub dokumentu częściowego.
client.update(...)
client.updateByQuery(...)
Usuń pojedynczy dokument
async deleteDocument(indexName: string, id: string) {
return this.client.delete({
index: indexName,
id,
});
};
Usuń pojedynczy dokument: Aktualizuje dokument za pomocą skryptu lub dokumentu częściowego.
client.delete(...)
client.deleteByQuery(...)
Klient JavaScript Elasticsearch [8.5] | Elastyczny
Odniesienie do interfejsu API | Klient JavaScript Elasticsearch [8.5] | Elastyczny
Przykłady | Klient JavaScript Elasticsearch [8.5] | Elastyczny
Utwórz niestandardowy analizator | Przewodnik Elasticsearch [8.5] | Elastyczny
Wbudowany analizator referencyjny | Przewodnik Elasticsearch [8.5] | Elastyczny
Typy danych pola | Przewodnik Elasticsearch [8.5] | Elastyczny
Mam nadzieję, że podobało Ci się czytanie o Elastic Search i o tym, jak można go wykorzystać do optymalizacji wyszukiwania i analizy w różnych aplikacjach. Jeśli ten artykuł okazał się pomocny lub masz dodatkowe pytania, nie wahaj się skontaktować ze mną za pośrednictwem komentarzy.
Aby uzyskać więcej aktualizacji i spostrzeżeń na temat najnowszych trendów technologicznych, śledź mnie na Twitterze lub LinkedIn . Dziękuję za przeczytanie i czekam na kontakt w mediach społecznościowych.
Twitter :https://twitter.com/geekfarmer_
Linkedin :https://www.linkedin.com/in/geekfarmer

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































