جستجو یک ویژگی بنیادین در برنامههای وب مدرن است. چه در حال یافتن یک محصول خاص در کاتالوگ تجارت الکترونیک باشید، چه در حال یافتن یک سند در اینترانت سازمانی، یا پرسوجو در یک پایگاه داده پیچیده از لاگها، توانایی بازیابی سریع اطلاعات مرتبط حیاتی است. آپاچی لوسن و آپاچی سولر از دیرباز استانداردهای صنعتی برای ساخت موتورهای جستجوی با کارایی بالا و مقیاسپذیر بودهاند. در حالی که لوسن کتابخانه اصلی برای فهرستبندی و جستجو را فراهم میکند، سولر یک چارچوب سرور قوی ارائه میدهد که استقرار و مدیریت برنامههای مبتنی بر لوسن را آسانتر و کارآمدتر میسازد.
درک هسته: آپاچی لوسن
آپاچی لوسن یک سرور نیست، بلکه یک کتابخانه جاوا است. این کتابخانه فناوری پایهای برای فهرستبندی و جستجوی تماممتنی را فراهم میکند. در هسته خود، لوسن با شکستن متن به توکنها (کلمات) و ایجاد یک فهرست معکوس عمل میکند. این فهرست اصطلاحات را به سندهایی که حاوی آنها هستند نگاشت میکند و امکان بازیابی بسیار سریع را فراهم میآورد.
برای توسعهدهندگان، کار مستقیم با لوسن کنترل حداکثری را ارائه میدهد. در اینجا یک مثال پایهای از نحوه فهرستبندی یک سند با استفاده از API لوسن آورده شده است:
Document doc = new Document();
doc.add(new StringField("id", "1", Field.Store.YES));
doc.add(new TextField("title", "Apache Lucene Basics", Field.Store.YES));
doc.add(new TextField("content", "Lucene is a fast, scalable open source full-text search library.", Field.Store.YES));
index.addDocument(doc);
این سادگی قدرتمند است، اما به این معنی است که باید بسیاری از وظایف عملیاتی را خودتان مدیریت کنید، مانند مدیریت خوشه، شبکهبندی و تجزیه پرسوجوها.
مقیاسپذیری با آپاچی سولر
آپاچی سولر یک پلتفرم جستجوی سازمانی مستقل است که بر بستر لوسن ساخته شده است. این پلتفرم یک رابط سرور وب، API RESTful و گزینههای پیکربندی قوی را اضافه میکند. سولر فرآیند استقرار موتور جستجو را با ارائه ویژگیهای آماده از جعبه مانند فهرستبندی توزیعشده، تکثیر پرسوجو و پایش، ساده میکند.
یکی از مهمترین مزایای سولر، رویکرد اسکیما به عنوان کد (Schema-as-Code) آن است. شما ساختار داده خود را در یک فایل پیکربندی XML یا JSON تعریف میکنید که امکان مدیریت اعلانی (declarative) فیلدهای فهرست شما را فراهم میآورد. این جداسازی نگرانیها (separation of concerns) نگهداری برنامههای جستجوی بزرگمقیاس را آسانتر میکند.
امتیازدهی مرتبطی و بهینهسازی
یک موتور جستجو فقط به اندازه امتیازدهی مرتبطی آن خوب است. هر دو لوسن و سولر از الگوریتم TF-IDF (فرکانس اصطلاح - فرکانس معکوس سند) به عنوان خط پایه استفاده میکنند، اما سولر امکان سفارشیسازی گسترده از طریق اجزای شباهت (similarity components) را فراهم میکند. شما میتوانید میزان وزندهی به فیلدهای عنوان در مقابل محتوای بدنه و همچنین تأثیر تازگی بر نتایج را تنظیم کنید.
بهینهسازی برای عملکرد کلیدی است. تکنیکهایی مانند شاردینگ (تقسیم فهرست بین چندین گره) و تکثیر (کپی کردن شاردها برای دسترسپذیری) برای مدیریت مجموعههای داده بزرگ حیاتی هستند. علاوه بر این، تنظیم پارامترهای ramBufferSizeMB و maxBufferedDocs در پیکربندی سولر شما میتواند نرخ فهرستبندی را به طور قابل توجهی بهبود بخشد.
جستجوی فستشده و موارد استفاده سازمانی
برای برنامههای سازمانی، جستجوی ساده کلمات کلیدی اغلب کافی نیست. کاربران انتظار دارند بتوانند نتایج را بر اساس متادیتا، مانند قیمت، دستهبندی یا تاریخ، فیلتر کنند. اینجاست که جستجوی فستشده (Faceted Search) میدرخشد. سولر به طور بومی از فستینگ (faceting) پشتیبانی میکند و به شما امکان میدهد تعداد موارد را برای مقادیر خاص فیلدها در همان پرسوجو به عنوان جستجوی خود تولید کنید. این امر امکان ایجاد رابطهای جستجوی پویا و واکنشگرا را بدون چندین ضربه به پایگاه داده فراهم میکند.
در سناریوهای سازمانی، چارچوب امنیتی سولر، لاگنویسی ممیزی و یکپارچهسازی با خطوط لوله داده موجود (از طریق SolrJ یا APIهای HTTP) آن را به یک انتخاب قابل اعتماد برای زیرساخت جستجوی حیاتی تبدیل میکند.
نتیجهگیری
انتخاب بین لوسن و سولر به نیازهای خاص شما بستگی دارد. اگر به عملکرد جستجوی سبک و جاسازیشده در یک برنامه جاوا نیاز دارید، لوسن انتخاب ایدهآل است. با این حال، برای راهحلهای جستجوی سازمانی پیچیده و توزیعشده که به مقیاسپذیری، آسانی در مدیریت و ویژگیهای پیشرفته مانند فستینگ و تکثیر نیاز دارند، آپاچی سولر گزینه برتر است. با درک نقاط قوت هر دو ابزار، توسعهدهندگان میتوانند تجربیات جستجوی سریع، مرتبط و مقیاسپذیر بسازند.