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();
อยากทราบว่า ต้องใช้ jar file ตัวไหนบ้างในการทำ index ภาษาไทย ครับ
ถ้าโหลด lucene ตัวเต็มมาจะมีส่วนที่เป็น analysis ครับ ThaiAnalyzer จะอยู่ใน lucene-analyzers-common.jar ครับ
Source code ตัวอย่างนี้เป็น lucene 3 หรือ 4 ครับ ขอบคุณครับ
lucene 3 ครับ … 4 จะต่างจากนี้ไปนิดหน่อย
ขอบคุณมากครับ