โลกใสๆ ของนักวิจัยขี้บ่น

พลังที่ไร้ขีดจำกัด คือพลังแห่งจินตนาการ

ABDUL

TAGS: None

Simple Searching for Thai documents with Lucene

Tags: ,

public class SimpleSearcher {

public static void main(String[] args) throws CorruptIndexException, IOException, ParseException {

/* ประกาศสร้างตัวสืบค้นฐานดัชนี IndexSearcher */
IndexSearcher searcher = new IndexSearcher(
//โดยต้องชี้ไปที่ directory ที่สร้างไว้
FSDirectory.open(new File(“indexdir”)));

//keyword ที่ต้องการค้น
String keyword=”ข้อความ”;

/*
* นำ keyword ไปวิเคราะห์ ให้ตรงกับค่าที่ถูกสร้างเป็นดัชนี
* ซึ่งการสืบค้นนั้น จำเป็นต้องระบุ field ที่ต้องไปค้นเสมอ
* และต้องระบุตัววิเคราะห์ภาษาด้วย (Analyzer)
* สิ่งที่ได้จากขั้นตอนนี้ เรียก Query
*/
QueryParser qp = new QueryParser(
Version.LUCENE_30, “name”,
new ThaiAnalyzer()
);

Query query = qp.parse(keyword);

/*
* ในการสืบค้น ต้องใช้ Query มาค้นหาเอกสารที่อยู่ในฐานดัชนี
* method “search(1,2)” นี้
* 1 = Query
* 2 = จำนวนเอกสาร หรือ document ที่ต้องการ
* ซึ่งเรียกเอกสารที่คืนกลับมานี้ว่า TopDocs
* ในตัวอย่าง ต้องการ TopDocs ทั้งหมด 20 document
*/
TopDocs docs = searcher.search(query, 20);

/*
* การแจง document ที่ได้กลับมา สามารถทำได้ตามตัวอย่างนี้
*/
for(ScoreDoc sd:docs.scoreDocs){
Document doc = searcher.doc(sd.doc);
String name = doc.get(“name”);
String numb = doc.get(“number”);
System.out.println(name+” “+numb);
}

}

}

Simple Indexing for Thai documents with Lucene

Tags: ,

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();

Highlighter ด้วย Lucene

Tags: ,

การสร้างระบบสืบค้นทั่วไปนั้น highlighter ถือเป็นองค์ประกอบเล็กๆ แต่สร้างสีสรรให้กับระบบของคุณอย่างมากมายครับ มาดูตัวอย่างการสร้างตัว highligher ให้กับผลการสืบค้นด้วยวิธีง่ายๆ จาก lucene กันครับ

ไม่ยากใช่มั้ยครับ ลองทำตามกันดู แล้วจะรู้ว่า แค่องค์ประกอบง่ายๆ เล็กๆ นี้ ทำให้ระบบของคุณน่าใช้ขึ้นอีกเป็นกอง

#ตัวอย่าง

“คีย์เวิร์ด” มากแค่ไหนถึงจะพอ?

Tags: , , ,

ในการสืบค้นเอกสาร หรือการใช้ search engine .. เรามักใช้เพียงแค่คำไม่กี่คำ ( 2 -3 คำ) ก็เกินพอ หากยังไม่เจอเอกสารที่ต้องการ ก็มักจะเลือกคำอื่นๆ แทนการเพิ่มจำนวนคำ แต่รู้บ้างหรือเปล่าครับ ว่า กูเกิล เขาให้เราใช้ได้มากที่สุดกี่คำ

คำตอบคือ 32 คำ ครับ …. ว่าแต่ใครเคยใช้ถึงบ้างครับ

© 2009 โลกใสๆ ของนักวิจัยขี้บ่น. All Rights Reserved.

This blog is powered by Wordpress and Magatheme by Bryan Helmig.