**لوسین** یک کتابخانه بازیابی اطلاعات (Information Retrieval) متن باز است که در سال ۱۹۹۹ توسط Doug cutting نوشته شده‌است. با استفاده از آن می‌توان اسناد را نمایه سازی کرد، سپس به روی آن‌ها جستجو کرد. لوسین جزو پروژه‌های Apache و تحت لیسانس ASF است. موتورهای جستجو نیز اطلاعات را نمایه گذاری می‌کنند و جستجو را بر روی نمایه‌ها انجام می‌دهند.

تاریخچه
-------

داوگ کاتینگ، لوسین را در سال ۱۹۹۹ نوشت. لوسین ابتدا به عنوان برنامه خانگی از سایت سورس فورج (source forge) قابل دسترسی بود. داوگ به بنیاد نرم‌افزاری آپاچی برای پروژه جاکارتا (jakarta) در سال ۲۰۰۱ پیوست. در سال ۲۰۰۵ پروژه جاکارتا در سطحی حرفه ای تر و بالاتر به داونگ سپرده شد.

لوسین، اسم میانی همسر داونگ و همچنین اسم مادر بزرگ مادر او است.

لوسین قبلاً شامل چند زیر پروژه می‌شد مانند Lucene.NETMahout , Tika , Nutch. در حال حاضر این سه برنامه برنامه‌هایی مستقل و سطح بالا هستند.

در سال ۲۰۱۰ سرور جستجو آپاچی سُلر (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
۲.