Emmy เป็นห้องสมุดสำหรับค้นหาข้อความฉบับเต็ม เขียนด้วยภาษา Rust ได้รับแรงบันดาลใจจาก Lucene แต่มีเป้าหมายที่จะมีความยืดหยุ่นมากขึ้น
let schema = SegmentSchemaBuilder :: new ( )
. add_full_doc ( "full_doc_feature" ) //features have names
. add_string_index (
"text_string_index" ,
"text" ,
Box :: new ( UAX29Analyzer :: new ( ) ) ) //Unicode tokenization
. build ( ) ;
let index = IndexBuilder :: new ( ) . create ( "path/to/index" , schema ) . unwrap ( ) ;
let doc1 = Doc :: new ( ) . string_field ( "text" , "The quick brown fox jumps over the lazy dog" ) ;
index . add_doc ( doc1 ) . unwrap ( ) ;
let doc2 = Doc :: new ( ) . string_field ( "text" , "Foxes are generally smaller than some other members of the family Canidae" ) ;
index . add_doc ( doc2 ) . unwrap ( ) ;
index . commit ( ) . unwrap ( ) ;
let query = TextQuery :: new (
"text" , //field
"brown fox" , //value
Box :: new ( UAX29Analyzer :: new ( ) ) , //Search with the same analyzer as we indexed
) ;
let mut collector = CountCollector :: new ( ) ;
let reader = index . open_reader ( ) . unwrap ( ) ;
reader . search ( & query , & mut collector ) . unwrap ( ) ;
assert_eq ! ( 1 , collector.total_count ( ) ) ;
Esmy คือระบบเรียกค้นข้อมูล และได้รับแรงบันดาลใจจาก Lucene มากมาย แนวคิดหลักคือการมีดัชนีแบบกลับด้าน ซึ่งช่วยให้คุณสามารถค้นหาว่าเอกสารใดมีคำบางคำอยู่ อย่างไรก็ตาม บ่อยครั้งจำเป็นต้องมีโครงสร้างข้อมูลเพิ่มเติมเพื่อให้สามารถแสดงภาพหรือประมวลผลข้อมูลได้ เช่น เพื่อสร้างฮิสโตแกรมของชุดผลลัพธ์ หรือสามารถค้นหาทางภูมิศาสตร์ได้ ดังนั้น Emmy จึงมีโครงสร้างเพื่อรองรับการเพิ่มโครงสร้างข้อมูลใหม่
Esmy เช่น Lucene มีโครงสร้างตามดัชนีและส่วนต่างๆ เซ็กเมนต์คือชุดของโครงสร้างข้อมูลบนดิสก์ และดัชนีคือชุดของเซ็กเมนต์ กลุ่มจะเปลี่ยนแปลงไม่ได้ เมื่อเพิ่มเอกสารลงใน Esmy คุณจะเพิ่มเอกสารบางฉบับที่ ผูกมัด กับดิสก์ ณ จุดใดจุดหนึ่ง ซึ่ง ณ จุดนี้เซ็กเมนต์จะถูกสร้างขึ้น เมื่อเวลาผ่านไป นี่จะหมายถึงกลุ่มเล็กๆ จำนวนมาก เพื่อป้องกันไม่ให้มีกลุ่มย่อยจำนวนมาก Esmy สามารถรวมกลุ่มต่างๆ เป็นกลุ่มที่ใหญ่ขึ้นได้ โครงสร้างข้อมูลบนดิสก์ของเซ็กเมนต์สามารถใช้เพื่อทำสิ่งที่มีประโยชน์ เช่น การค้นหาข้อความ
นอกเหนือจากการไม่ได้อยู่ใน JVM แล้ว ยังมีความแตกต่างเล็กน้อยจาก Lucene
ประการหนึ่งคือ Lucene ถือว่าดัชนีกลับหัวเป็นแกนหลักของไลบรารี แม้ว่าจะเป็นคุณลักษณะสำคัญของ Esmy แต่ก็เป็นเพียงโครงสร้างข้อมูลที่มีประโยชน์ประเภทหนึ่งเท่านั้น เอสมี่กลับมีแนวคิดเกี่ยวกับ คุณลักษณะส่วนต่างๆ แทน ดัชนีกลับเป็นคุณลักษณะหนึ่งของเซ็กเมนต์ดังกล่าว ข้อกำหนดสำหรับคุณลักษณะเซ็กเมนต์คือคุณสามารถสร้างได้จากชุดเอกสาร และคุณลักษณะนี้สามารถรวมไฟล์ที่เขียนลงในไฟล์ขนาดใหญ่ได้
คุณลักษณะจะถูกระบุด้วยชื่อ และเนื่องจากคุณลักษณะเหล่านั้นแยกออกจากฟิลด์ คุณจึงเพิ่มดัชนีได้มากกว่าหนึ่งประเภทสำหรับฟิลด์ใดฟิลด์หนึ่งโดยเฉพาะ ซึ่งหมายความว่า คุณสามารถจัดทำดัชนีเอกสารด้วยเครื่องวิเคราะห์ต่างๆ ได้โดยไม่ต้องมีฟิลด์แยกสำหรับเอกสารเหล่านั้น เช่นเดียวกับที่คุณทำใน Lucene
อีกประการหนึ่งคือเอสมีมีมุมมองที่ดื้อรั้น (แต่เปิดกว้าง) มากกว่าว่าเอกสารคืออะไร Lucene ถือว่าเอกสารเป็นชุดของฟิลด์ที่อินพุต แต่ไม่มีแนวคิดเกี่ยวกับเอกสารเมื่ออ่าน สิ่งนี้นำไปสู่เช่น Elasticsearch ที่มีโครงสร้าง JSON จำลองสิ่งนี้ โดยจัดเก็บ JSON เป็นฟิลด์สตริง เนื่องจาก Lucene ไม่ใช่ Elasticsearch Lucene จึงไม่สามารถใช้ฟิลด์ _source
นั้นได้ Lucene จึงไม่สามารถใช้ฟิลด์นั้นได้ เอสมีมีแนวคิดเกี่ยวกับเอกสารและโครงสร้างข้อมูลบนดิสก์แทน ซึ่งหมายความว่าเอสมี่สามารถใช้เอกสารได้
พื้นที่เก็บข้อมูลนี้ได้รับอนุญาตภายใต้ใบอนุญาต Apache เวอร์ชัน 2.0 ยกเว้นข้อมูลในไดเร็กทอรีข้อมูลที่มาจาก Wikipedia และใช้เพื่อการทดสอบเท่านั้น