Premiers pas avec le client Elastic Search NodeJs
ES : recherche élastique
Conditions préalables
Qu'est-ce qu'Elastic Search ? Comment fonctionne Elastic Search ? Créer un nouvel index avec mappage et paramètres dans Elastic Search ?Dans nos précédents articles sur Elastic Search, nous avons découvert les bases d'Elastic Search, son fonctionnement et la création d'un nouvel index. Dans cet article, nous allons continuer à travailler avec le client Elastic Search NodeJS et découvrir comment indexer de nouveaux documents, mettre à jour des documents indexés existants et supprimer des documents indexés. En comprenant ces fonctionnalités, nous pouvons utiliser plus efficacement Elastic Search pour gérer et mettre à jour les données de nos projets. Commençons et voyons comment ces fonctions fonctionnent en action.
Tous les exemples ci-dessous sont basés sur le client ES Node .
Installation
Vous pouvez utiliser le package npm Elastic Search dans votre application nodejs.
npm install @elastic/elasticsearch
Notre cluster ES est configuré avec la sécurité explicitement désactivée , c'est pourquoi nous pouvons nous connecter via HTTP.
import { Client, errors } from '@elastic/elasticsearch';
const client = new Client({
node: 'http://example.com'
});
Toutes les autres références liées à ES que vous pouvez obtenir ici .
Ping
Pour vérifier que le client ES est connecté au cluster http défini, effectuez une action 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: {}
});
};
Vérifiez si l'index existe ou non.
async indexExists(indexName: string) {
return this.client.indices.exists({
index: indexName,
});
};
Avant d'ajouter un document à indexer, il est recommandé de mettre à jour les paramètres d'indexation et d'ajouter les analyseurs requis en fonction de votre fonctionnalité de recherche. Voici un exemple de paramétrage d'index :
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',
},
}
});
};
Ajouter des mappages
Avant d'ajouter un document à indexer, il est recommandé de mettre à jour les paramètres d'index, puis de mettre à jour les mappages d'index et d'attribuer des propriétés d'analyseur avec des champs. Voici un exemple de mappages d'index :
Comme lors de la mise à jour des paramètres, nous avons ajouté un autocompleteanalyseur que nous pouvons définir dans les mappages en tant que propriété de recherche. Le mappage d'index peut être différent pour différents index.
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' },
},
},
});
};
Ajouter un document
Il existe différentes manières d'ajouter des documents dans un index :
Document unique
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
});
};
Mettre à jour un seul document : met à jour un document avec un script ou un document partiel.
client.update(...)
client.updateByQuery(...)
Supprimer un seul document
async deleteDocument(indexName: string, id: string) {
return this.client.delete({
index: indexName,
id,
});
};
Supprimer un seul document : met à jour un document avec un script ou un document partiel.
client.delete(...)
client.deleteByQuery(...)
Client JavaScript Elasticsearch [8.5] | Élastique
Référence API | Client JavaScript Elasticsearch [8.5] | Élastique
Exemples | Client JavaScript Elasticsearch [8.5] | Élastique
Créer un analyseur personnalisé | Guide de recherche élastique [8.5] | Élastique
Référence analyseur intégré | Guide de recherche élastique [8.5] | Élastique
Types de données de champ | Guide de recherche élastique [8.5] | Élastique
J'espère que vous avez apprécié la lecture d'Elastic Search et comment il peut être utilisé pour optimiser la recherche et l'analyse dans diverses applications. Si vous avez trouvé cet article utile ou si vous avez d'autres questions, n'hésitez pas à me contacter via les commentaires.
Pour plus de mises à jour et d'informations sur les dernières tendances technologiques, assurez-vous de me suivre sur Twitter ou LinkedIn . Merci d'avoir lu, et j'ai hâte de communiquer avec vous sur les réseaux sociaux.
Gazouillement :https://twitter.com/geekfarmer_
Linkedin :https://www.linkedin.com/in/geekfarmer
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































