Beginnen Sie mit dem Elastic Search NodeJs-Client
ES: Elastische Suche
Voraussetzungen
Was ist Elastic Search? Wie funktioniert die elastische Suche? Einen neuen Index mit Mapping und Einstellungen in Elastic Search erstellen?In unseren vorherigen Artikeln zu Elastic Search haben wir die Grundlagen von Elastic Search, seine Funktionsweise und das Erstellen eines neuen Indexes kennengelernt. In diesem Artikel werden wir die Arbeit mit dem Elastic Search NodeJS-Client fortsetzen und untersuchen, wie neue Dokumente indiziert, vorhandene indizierte Dokumente aktualisiert und indizierte Dokumente gelöscht werden. Wenn wir diese Funktionen verstehen, können wir Elastic Search effektiver nutzen, um die Daten in unseren Projekten zu verwalten und zu aktualisieren. Lassen Sie uns anfangen und sehen, wie diese Funktionen in Aktion funktionieren.
Alle folgenden Beispiele basieren auf dem ES Node -Client .
Installation
Sie können das npm Elastic Search-Paket in Ihrer nodejs-Anwendung verwenden.
npm install @elastic/elasticsearch
Unser ES-Cluster ist mit explizit deaktivierter Sicherheit konfiguriert , weshalb wir eine Verbindung über HTTP herstellen können.
import { Client, errors } from '@elastic/elasticsearch';
const client = new Client({
node: 'http://example.com'
});
Alle weiteren ES-bezogenen Referenzen finden Sie hier .
Klingeln
Um zu überprüfen, ob der ES-Client mit dem definierten HTTP-Cluster verbunden ist, führen Sie eine Ping-Aktion durch.
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: {}
});
};
Überprüfen Sie, ob der Index vorhanden ist oder nicht.
async indexExists(indexName: string) {
return this.client.indices.exists({
index: indexName,
});
};
Bevor Sie ein Dokument zum Index hinzufügen, wird empfohlen, die Indexeinstellungen zu aktualisieren und die erforderlichen Analysetools basierend auf Ihrer Suchfunktion hinzuzufügen. Hier ist ein Beispiel für die Indexeinstellung:
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',
},
}
});
};
Zuordnungen hinzufügen
Bevor Sie ein Dokument zum Index hinzufügen, wird empfohlen, die Indexeinstellungen zu aktualisieren, dann die Indexzuordnungen zu aktualisieren und Analysatoreigenschaften mit Feldern zuzuweisen. Hier ist ein Beispiel für Indexzuordnungen:
Wie beim Aktualisieren der Einstellungen haben wir einen autocompleteAnalysator hinzugefügt, den wir in Zuordnungen als Sucheigenschaften definieren können. Die Indexzuordnung kann für verschiedene Indizes unterschiedlich sein.
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' },
},
},
});
};
Dokument hinzufügen
Es gibt verschiedene Möglichkeiten, Dokumente in einen Index aufzunehmen:
Einzeldokument
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
});
};
Einzelnes Dokument aktualisieren: Aktualisiert ein Dokument mit einem Skript oder Teildokument.
client.update(...)
client.updateByQuery(...)
Löschen Sie ein einzelnes Dokument
async deleteDocument(indexName: string, id: string) {
return this.client.delete({
index: indexName,
id,
});
};
Einzelnes Dokument löschen: Aktualisiert ein Dokument mit einem Skript oder Teildokument.
client.delete(...)
client.deleteByQuery(...)
Elasticsearch-JavaScript-Client [8.5] | Elastisch
API-Referenz | Elasticsearch-JavaScript-Client [8.5] | Elastisch
Beispiele | Elasticsearch-JavaScript-Client [8.5] | Elastisch
Erstellen Sie ein benutzerdefiniertes Analysetool | Elasticsearch-Leitfaden [8.5] | Elastisch
Eingebaute Analysator-Referenz | Elasticsearch-Leitfaden [8.5] | Elastisch
Felddatentypen | Elasticsearch-Leitfaden [8.5] | Elastisch
Ich hoffe, Ihnen hat die Lektüre von Elastic Search gefallen und wie es zur Optimierung der Suche und Analyse in verschiedenen Anwendungen eingesetzt werden kann. Wenn Sie diesen Artikel hilfreich fanden oder weitere Fragen haben, zögern Sie bitte nicht, mich über die Kommentare zu kontaktieren.
Für weitere Updates und Einblicke in die neuesten Technologietrends folgen Sie mir auf Twitter oder LinkedIn . Vielen Dank fürs Lesen und ich freue mich darauf, mit Ihnen in den sozialen Medien in Kontakt zu treten.
Twitter :https://twitter.com/geekfarmer_
Linkedin :https://www.linkedin.com/in/geekfarmer

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































