เริ่มต้นใช้งาน Elastic Search NodeJs Client
ES: การค้นหาแบบยืดหยุ่น
ข้อกำหนดเบื้องต้น
การค้นหาแบบยืดหยุ่นคืออะไร? การค้นหาแบบยืดหยุ่นทำงานอย่างไร สร้างดัชนีใหม่ด้วยการแมปและการตั้งค่าใน Elastic Search ไหมในบทความก่อนหน้าของเราเกี่ยวกับ Elastic Search เราได้เรียนรู้เกี่ยวกับพื้นฐานของ Elastic Search วิธีการทำงาน และวิธีสร้างดัชนีใหม่ ในบทความนี้ เราจะทำงานกับไคลเอ็นต์ NodeJS ของ Elastic Search ต่อไป และสำรวจวิธีการทำดัชนีเอกสารใหม่ อัปเดตเอกสารที่ทำดัชนีแล้วที่มีอยู่ และลบเอกสารที่ทำดัชนี เมื่อเข้าใจคุณลักษณะเหล่านี้แล้ว เราจะสามารถใช้ 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] | ยืดหยุ่น
สร้างตัววิเคราะห์แบบกำหนดเอง | คู่มือการค้นหาแบบยืดหยุ่น [8.5] | ยืดหยุ่น
การอ้างอิงตัววิเคราะห์ในตัว | คู่มือการค้นหาแบบยืดหยุ่น [8.5] | ยืดหยุ่น
ชนิดข้อมูลฟิลด์ | คู่มือการค้นหาแบบยืดหยุ่น [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)