لوسین (رایانه)
لوسین یک کتابخانه بازیابی اطلاعات (Information Retrieval) متن باز است که در سال ۱۹۹۹ توسط Doug cutting نوشته شده است. با استفاده از آن میتوان اسناد را نمایه سازی کرد، سپس به روی آنها جستجو کرد. لوسین جزو پروژههای Apache و تحت لیسانس ASF است. موتورهای جستجو نیز اطلاعات را نمایه گذاری میکنند و جستجو را بر روی نمایهها انجام میدهند.
تاریخچه
داوگ کاتینگ، لوسین را در سال 1999 نوشت. لوسین ابتدا به عنوان برنامه خانگی از سایت سورس فورج (source forge) قابل دسترسی بود. داوگ به بنیاد نرم افزاری آپاچی برای پروژه جاکارتا (jakarta) در سال 2001 پیوست. در سال 2005 پروژه جاکارتا در سطحی حرفه ای تر و بالاتر به داونگ سپرده شد.
لوسین، اسم میانی همسر داونگ و همچنین اسم مادر بزرگ مادر او است.
لوسین قبلا شامل چند زیر پروژه می شد مانند Lucene.NETMahout , Tika , Nutch. در حال حاضر این سه برنامه برنامه هایی مستقل و سطح بالا هستند.
در سال 2010 سرور جستوجو آپاچی سُلر (Solr) به عنوان زیر پروژه به لوسین پیوست.
;()Document doc = new Document ;((document.add(new TypeField("fildName",value , YES/NO
TypeFieldمیتواند TextFieldیا StringField یا FloatField و… باشد. Index writer از IndexWriter برای ایجاد نمایه از شیء استفاده میشود. شیء IndexWriter در زمان ایجاد دو شیء Analyzer و Directory را دریافت می کند. شیء Directory پوشه محل ذخیرهسازی نمایه را مشخص میکند. شیء Analyzer نحوه تحلیل ستونها را نشان میدهد. متغیر بولین اختیاری بوده و بهطور پیش فرض false میباشد. بعد از نمایه سازی اسناد، میتوان بر روی نمایههای ساخته شده جستجو انجام داد. کلاسهای اصلی لوسین برای جستجو عبارت اند از IndexSearcher و Query و زیر کلاسهای آنها عبارت اند از ScoreDoc و TopDocs ,QueryParser که در ادامه کاربرد هر متد آمده است IndexSearcher: کلاس اصلی جستجو درلوسین که برای جستجو از متدهای آن استفاده میشود. QueryParsey: کلاسی برای پردازش یک عبارت و تبدیل آن به یک پرس و جو. TopDocs: شی برای نگهداری سندهای با امتیاز بالا بازگشتی جستجو. ScoreDoc: آرایه ای برای دسترسی به هریک از نتایج TopDocs. در لوسین نتایج بازگشتی پرس و جو به صورت پیش فرض بر اساس امتیاز مرتب میشوند که پارامترهای مختلفی در محاسبهٔ امتیاز نقش دارند. بهتر است یک شیء IndexSearcher را در کل برنامه، برای پاسخ گویی به پرس و جوها استفاده کنیم. به بیان دیگر پس از انجام یک جستجو آن را نبندیم و برای پرس و جوهای دیگر نیز از همان استفاده شود.
مثال
public class HelloLucene {
public static void main(String[] args) throws IOException, ParseException {
StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_40);
Directory index = new RAMDirectory();
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, analyzer);
IndexWriter w = new IndexWriter(index, config);
addDoc(w, "Lucene in Action", "193398817");
addDoc(w, "Lucene for Dummies", "55320055Z");
addDoc(w, "Managing Gigabytes", "55063554A");
addDoc(w, "The Art of Computer Science", "9900333X");
w.close();
String querystr = args.length> 0 ? args[0]: "lucene";.
Query q = new QueryParser(Version.LUCENE_40, "title", analyzer).parse(querystr);
int hitsPerPage = ۱۰;
IndexReader reader = DirectoryReader.open(index);
IndexSearcher searcher = new IndexSearcher(reader);
TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);
searcher.search(q, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
System.out.println("Found " + hits.length + " hits.");
for(int i=۰;i<hits.length;++i) {
int docId = hits[i].doc;
Document d = searcher.doc(docId);
System.out.println((i + 1) + ". " + d.get("isbn") + "\t" + d.get("title"));
}.
reader.close();
}
private static void addDoc(IndexWriter w, String title, String isbn) throws IOException { Document doc = new Document(); doc.add(new TextField("title", title, Field.Store.YES)); doc.add(new StringField("isbn", isbn, Field.Store.YES)); w.addDocument(doc); }
}[1]
منابع
- Lucene in Action. Erik Hatcher. Manning Publications. 2009