لوسین (رایانه)

تاریخچه

داوگ کاتینگ , لوسین را در سال 1999 نوشت.لوسن ابتدا به عنوان برنامه خانگی از سایت سورس فورج (source forge) قابل دسترسی بود.داوگ به بنیاد نرم افزاری آپاچی برای پروژه
جاکارتا(jakarta) در سال 2001 پیوست.در سال 2005 پروژه جاکارتا در سطحی حرفه ای تر و بالا تر به داونگ سپرده شد.
لوسین , اسم میانی همسر داونگ و همچنین اسم مادر بزرگ مادر او  است.
لوسین قبلا شامل چند زیر پروژه میشد مانند Lucene.NET, Mahout , 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);
 }
}