Simple Indexing for Thai documents with Lucene

public class SimpleIndexer {

public static void main(String[] args) throws Exception{

/*#สร้าง IndexWriter*/
IndexWriter writer = new IndexWriter(
//กำหนด directory สำหรับเก็บไฟล์ดัชนี
FSDirectory.open(new File(“indexdir”)),
//กำหนดตัววิเคราะห์ภาษา
new ThaiAnalyzer(),
//reindex, true = สร้างใหม่ทั้งหมด/ false = สร้างเพิ่มเติมจากไฟล์เดิม (มีโอกาสเกิด duplicate document)
true,
MaxFieldLength.UNLIMITED);

//ตัวอย่างข้อความที่ต้องการสร้างดัชนี้
String st1 = “ข้อความ”;
String st2 = “123456789”;

/*#สร้าง document*/

/*
* 1 เอกสาร หรือ document หมายถึง 1 ชุดข้อมูล ไม่ใช่ 1 หน้าเอกสาร
* เช่น ข้อมูลไฟล์ xml 1 ไฟล์ ภายในบรรจุข้อมูล 10 ชุดข้อมูล ก็จะสร้าง document ได้เป็น 10 document
*/
Document doc = new Document();

/*
ใน 1 เอกสาร หรือ document สามารถมีได้หลาย field
constructor  Field(ชื่อของ field,ค่าของ field,การเก็บไฟล์,การวิเคราะห์ข้อความ)
Store.YES = สร้างดัชนีแล้วเก็บลงไฟล์ สามารถนำกลับมาใช้ โดยไม่ต้องสร้างดัชนีใหม่อีก
Index.ANALYZED = กำหนดให้มีการวิเคราะห์ข้อความด้วย เช่น การตัดคำ
Index.NOT_ANALYZED = ไม่มีการวิเคราะห์ข้อความ
แสดงว่าการค้นหาต้องให้ keyword ที่ตรงกับค่าใน field เท่านั้น
เหมาะสำหรับข้อมูลที่เป็นชุดตัวเลข หรือ id
หรือกลุ่มข้อความที่ไม่ต้องการให้แยกส่วนใดส่วนหนึ่งออกได้
*/
Field f1 = new Field(“name”, st1, Store.YES, Index.ANALYZED);
Field f2 = new Field(“number”, st2, Store.YES, Index.NOT_ANALYZED);

//add field ที่สร้างลงใน document
doc.add(f1);
doc.add(f2);

//add document ลงในฐานดัชนี
writer.addDocument(doc);
//สิ้นสุดการสร้างดัชนีสำหรับ 1 ชุดข้อมูล

/*
* หากมีชุดข้อมูลต่อไป ให้ย้อนกลับไปเริ่มตั้งแต่การสร้าง document
* เรื่อยมาจนถึงการเพิ่ม document เข้าไปใน IndexWriter
*/

//เมื่อ document ทั้งหมดถูกสร้างและ add ลงไปใน writer แล้วจึง close write ถือเป็นการสิ้นสุดการสร้างฐานดัชนี
writer.close();

5 thoughts on “Simple Indexing for Thai documents with Lucene

  1. อยากทราบว่า ต้องใช้ jar file ตัวไหนบ้างในการทำ index ภาษาไทย ครับ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น

This site uses Akismet to reduce spam. Learn how your comment data is processed.