Начните работу с Elastic Search NodeJs Client
ES: эластичный поиск
Предпосылки
Что такое эластичный поиск? Как работает эластичный поиск? Создать новый индекс с отображением и настройками в Elastic Search?В наших предыдущих статьях об Elastic Search мы узнали об основах Elastic Search, о том, как он работает и как создать новый индекс. В этой статье мы продолжим работу с клиентом Elastic Search NodeJS и рассмотрим, как индексировать новые документы, обновлять существующие проиндексированные документы и удалять проиндексированные документы. Понимая эти функции, мы можем более эффективно использовать Elastic Search для управления и обновления данных в наших проектах. Давайте начнем и посмотрим, как эти функции работают в действии.
Все приведенные ниже примеры основаны на клиенте ES Node .
Установка
Вы можете использовать пакет npm Elastic Search в своем приложении nodejs.
npm install @elastic/elasticsearch
Наш кластер ES настроен с явным отключением безопасности , поэтому мы можем подключаться через HTTP.
import { Client, errors } from '@elastic/elasticsearch';
const client = new Client({
node: 'http://example.com'
});
Все другие ссылки, связанные с ES, вы можете получить здесь .
пинг
Чтобы проверить, подключен ли клиент ES к определенному http-кластеру, выполните действие 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: {}
});
};
Проверьте, существует ли индекс или нет.
async indexExists(indexName: string) {
return this.client.indices.exists({
index: indexName,
});
};
Прежде чем добавлять какой-либо документ в индекс, рекомендуется обновить настройки индекса и добавить необходимые анализаторы в соответствии с вашими функциями поиска. Вот пример настройки индекса:
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',
},
}
});
};
Добавить сопоставления
Перед добавлением любого документа в индекс рекомендуется обновить настройки индекса, а затем обновить отображения индекса и назначить свойства анализатора с полями. Вот пример сопоставления индексов:
Как и при обновлении настроек, мы добавили autocompleteанализатор, который мы можем определить в сопоставлениях как свойство поиска. Отображение индекса может быть разным для разных индексов.
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' },
},
},
});
};
Добавить документ
Существуют различные способы добавления документов в индекс:
Один документ
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
});
};
Обновить отдельный документ: обновляет документ сценарием или частью документа.
client.update(...)
client.updateByQuery(...)
Удалить один документ
async deleteDocument(indexName: string, id: string) {
return this.client.delete({
index: indexName,
id,
});
};
Удалить отдельный документ: обновляет документ сценарием или частью документа.
client.delete(...)
client.deleteByQuery(...)
JavaScript-клиент Elasticsearch [8.5] | Эластичный
Справочник по API | JavaScript-клиент Elasticsearch [8.5] | Эластичный
Примеры | JavaScript-клиент Elasticsearch [8.5] | Эластичный
Создать собственный анализатор | Руководство по Elasticsearch [8.5] | Эластичный
Справочник по встроенному анализатору | Руководство по Elasticsearch [8.5] | Эластичный
Типы данных поля | Руководство по Elasticsearch [8.5] | Эластичный
Надеюсь, вам понравилось читать об Elastic Search и о том, как его можно использовать для оптимизации поиска и анализа в различных приложениях. Если вы нашли эту статью полезной или у вас есть дополнительные вопросы, пожалуйста, не стесняйтесь обращаться ко мне через комментарии.
Для получения дополнительных обновлений и информации о последних технологических тенденциях обязательно подписывайтесь на меня в Twitter или LinkedIn . Спасибо за чтение, и я с нетерпением жду связи с вами в социальных сетях.
Твиттер :https://twitter.com/geekfarmer_
Ссылка :https://www.linkedin.com/in/geekfarmer

![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































