ฉันรู้ว่า ElasticSearch สร้างขึ้นจาก Apache Lucene แต่ฉันต้องการทราบความแตกต่างที่สำคัญระหว่างทั้งสอง
ฉันรู้ว่า ElasticSearch สร้างขึ้นจาก Apache Lucene แต่ฉันต้องการทราบความแตกต่างที่สำคัญระหว่างทั้งสอง
คำตอบ:
Lucene เป็นJava ห้องสมุด คุณสามารถรวมไว้ในโครงการของคุณและอ้างถึงฟังก์ชันโดยใช้การเรียกฟังก์ชัน
ElasticSearch เป็นJSONตาม, กระจาย , เว็บเซิร์ฟเวอร์สร้างขึ้นเมื่อกว่า Lucene แม้ว่า Lucene จะทำงานจริงอยู่ข้างใต้ แต่ Elasticsearch ก็มีเลเยอร์ที่สะดวกสบายเหนือ Lucene แต่ละชาร์ดที่สร้างขึ้นใน Elasticsearch เป็นอินสแตนซ์ Lucene ที่แยกจากกัน เพื่อสรุป
นอกจากคำพูดของ@Vineeth Mohan :
ความพร้อมใช้งานสูง:มีการแจกจ่าย Elasticsearch เพื่อให้สามารถจัดการการจำลองข้อมูลซึ่งหมายถึงการมีสำเนาข้อมูลหลายชุดในคลัสเตอร์ของคุณ สิ่งนี้ช่วยให้มีความพร้อมใช้งานสูง
DSL แบบสอบถามที่มีประสิทธิภาพ : Elasticsearch เสนออินเทอร์เฟซ JSON สำหรับการอ่านและเขียนข้อความค้นหาที่อยู่ด้านบนของ Lucene ขอบคุณ Elasticsearch คุณสามารถเขียนคำค้นหาที่ซับซ้อนได้โดยไม่ต้องรู้ไวยากรณ์ของ Lucene
Schemaless (Schema-Free): Fields (ชื่อคู่ค่า) สำหรับschema
ไม่ต้องกำหนดมาก่อน เมื่อคุณทำดัชนีข้อมูล elasticsearch สามารถสร้างสคีมาโดยอัตโนมัติที่รันไทม์เช่นเดียวกับเวทมนตร์
ฉันจะตอบจากมุมมองการใช้งาน
Lucene เป็นเครื่องมือค้นหาที่ห้องสมุด คุณต้องการใช้เพื่อสร้างเครื่องมือค้นหาของคุณเองไม่ว่าจะเป็นคู่แข่งใหม่ของ Elasticsearch หรือ Solr หรือสิ่งที่แคบสำหรับกรณีการใช้งานของคุณ (เช่นการวิเคราะห์ข้อความ)
ElasticSearch เป็นเครื่องมือค้นหา คนส่วนใหญ่ใช้สำหรับการรวมบันทึกการค้นหาผลิตภัณฑ์หรือรูปแบบของสองสิ่งนี้ (เช่นการวิเคราะห์โซเชียลมีเดียหรือค้นหาผู้ที่เกี่ยวข้องสำหรับเกณฑ์การค้นหาบางอย่าง) มันสร้างขึ้นบน Lucene ดังนั้นจึงหมายความว่าส่วนใหญ่ ( แต่ไม่ทั้งหมด) ของคุณลักษณะของมัน นอกจากนี้ยังเพิ่มจำนวนมากที่สำคัญที่สุด:
ฉันจะเพิ่มอีกมุมหนึ่งในการสนทนา
ดัชนี ElasticSearchเป็นก้อนของเอกสารเช่นเดียวกับฐานข้อมูลประกอบด้วยตารางในโลกสัมพันธ์
เพื่อให้บรรลุการปรับขนาดเราได้กระจายดัชนี Elasticsearch ไปยังโหนด / เซิร์ฟเวอร์ทางกายภาพหลายตัว
สำหรับการที่เราทำลาย ElasticSearch ดัชนีเป็นหน่วยขนาดเล็กซึ่งเรียกว่าเศษ
คำถาม: เกี่ยวข้องกับ Lucene index อย่างไร?
หากเราต้องการค้นหาคำที่เฉพาะเจาะจง (ตัวอย่างเช่น: " เค้ก " หรือ " คุกกี้ ") เราจะต้องไปดูแต่ละชาร์ดและมองหามัน (ให้แยกวิธีการระบุตำแหน่งของเศษและการจำลองในแต่ละโหนด)
การดำเนินการนี้จะใช้เวลามากดังนั้นเราจึงต้องใช้โครงสร้างข้อมูลที่มีประสิทธิภาพสำหรับการค้นหานี้ซึ่งเป็นจุดที่ดัชนีของ Luceneเข้ามามีบทบาท
ชิ้นส่วนของElasticsearchแต่ละชิ้นจะขึ้นอยู่กับโครงสร้างดัชนี Luceneและจัดเก็บสถิติเกี่ยวกับคำศัพท์เพื่อให้การค้นหาตามคำมีประสิทธิภาพมากขึ้น
(!) สิ่งนี้ค่อนข้างสับสนเนื่องจากคำว่า "ดัชนี" และความจริงที่ว่าชิ้นส่วนของ Elasticsearch เป็นส่วนหนึ่งของดัชนี Elasticsearch แต่ขึ้นอยู่กับโครงสร้างข้อมูลของดัชนี Lucene
ดังที่เห็นได้จากตัวอย่างด้านล่างดัชนีของ Lucene จะจัดเก็บเนื้อหาของเอกสารต้นฉบับพร้อมข้อมูลเพิ่มเติมเช่นพจนานุกรมคำศัพท์และความถี่ของคำซึ่งเพิ่มประสิทธิภาพในการค้นหา:
Term Document Frequency
Cake doc_id_1, doc_id_8 4 (2 in doc_id_1, 2 in doc_id_8)
Cookie doc_id_1, doc_id_6 3 (2 in doc_id_1, 1 in doc_id_6)
Spaghetti doc_id_12 1 (1 in doc_id_12)
ดัชนีของ Lucene อยู่ในกลุ่มดัชนีที่เรียกว่าดัชนีกลับหัว เนื่องจากสามารถแสดงรายการเอกสารที่มีคำศัพท์ได้
นี่คือค่าผกผันของความสัมพันธ์ตามธรรมชาติซึ่งเอกสารแสดงรายการเงื่อนไข
(1) Shard เป็นไดเร็กทอรีของไฟล์ที่มีเอกสาร
(2) เอกสารคือลำดับของฟิลด์
(3) ฟิลด์คือลำดับของคำที่มีชื่อ