Introdução ao Elastic Search NodeJs Client
ES: Pesquisa elástica
Pré-requisitos
O que é Pesquisa Elástica? Como funciona a pesquisa elástica? Criar um novo índice com mapeamento e configurações no Elastic Search?Em nossos artigos anteriores sobre o Elastic Search, aprendemos sobre os fundamentos do Elastic Search, como ele funciona e como criar um novo índice. Neste artigo, continuaremos trabalhando com o cliente Elastic Search NodeJS e exploraremos como indexar novos documentos, atualizar documentos indexados existentes e excluir documentos indexados. Compreendendo esses recursos, podemos usar o Elastic Search com mais eficiência para gerenciar e atualizar os dados em nossos projetos. Vamos começar e ver como essas funções funcionam em ação.
Todos os exemplos abaixo são baseados no cliente ES Node .
Instalação
Você pode usar o pacote npm Elastic Search em seu aplicativo nodejs.
npm install @elastic/elasticsearch
Nosso cluster ES está configurado com a segurança explicitamente desativada , por isso podemos nos conectar via HTTP.
import { Client, errors } from '@elastic/elasticsearch';
const client = new Client({
node: 'http://example.com'
});
Todas as outras referências relacionadas ao ES você pode obter aqui .
Ping
Para verificar se o cliente ES está conectado com o cluster http definido, execute a ação 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: {}
});
};
Verifique se o índice existe ou não.
async indexExists(indexName: string) {
return this.client.indices.exists({
index: indexName,
});
};
Antes de adicionar qualquer documento ao índice, é recomendável atualizar as configurações de índice e adicionar os analisadores necessários com base em sua funcionalidade de pesquisa. Aqui está um exemplo de configuração de índice:
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',
},
}
});
};
Adicionar mapeamentos
Antes de adicionar qualquer documento ao índice, é recomendável atualizar as configurações do índice, atualizar os mapeamentos do índice e atribuir as propriedades do analisador aos campos. Aqui está um exemplo de mapeamentos de índice:
Ao atualizar as configurações, adicionamos o autocompleteanalisador que podemos definir nos mapeamentos como propriedade de pesquisa. O mapeamento de índice pode ser diferente para diferentes índices.
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' },
},
},
});
};
Adicionar documento
Existem diferentes maneiras de adicionar documentos em um índice:
Documento Único
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
});
};
Atualizar documento único: atualiza um documento com um script ou documento parcial.
client.update(...)
client.updateByQuery(...)
Excluir um único documento
async deleteDocument(indexName: string, id: string) {
return this.client.delete({
index: indexName,
id,
});
};
Excluir documento único: atualiza um documento com um script ou documento parcial.
client.delete(...)
client.deleteByQuery(...)
Cliente Elasticsearch JavaScript [8.5] | Elástico
Referência da API | Cliente Elasticsearch JavaScript [8.5] | Elástico
Exemplos | Cliente Elasticsearch JavaScript [8.5] | Elástico
Criar um analisador personalizado | Guia do Elasticsearch [8.5] | Elástico
Referência do analisador integrado | Guia do Elasticsearch [8.5] | Elástico
Tipos de dados de campo | Guia do Elasticsearch [8.5] | Elástico
Espero que você tenha gostado de ler sobre o Elastic Search e como ele pode ser usado para otimizar a pesquisa e a análise em vários aplicativos. Se você achou este artigo útil ou se tiver mais alguma dúvida, não hesite em entrar em contato comigo pelos comentários.
Para mais atualizações e informações sobre as últimas tendências tecnológicas, siga-me no Twitter ou LinkedIn . Obrigado por ler e estou ansioso para me conectar com você nas mídias sociais.
Twitter :https://twitter.com/geekfarmer_
Linkedin :https://www.linkedin.com/in/geekfarmer





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)