اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
بر مبنای پیاده سازی متداولی که در n هزار سایت اینترنتی میتوان یافت، نحوه کار با جستجوگر لوسین حدودا به این شکل است:
و ... اینکار به این شکل غلط است!
مطابق مستندات رسمی لوسین، این کتابخانه thread-safe است. به این معنا که در آن واحد چندین و چند کاربر میتوانند از یک وهله از شیءهای Reader و Searcher استفاده کنند و نباید به ازای هر جستجو، یکبار این اشیاء را ایجاد و تخریب کرد. البته در اینجا تنها یک Writer در آن واحد میتواند مشغول به کار باشد.
مشکلاتی که به همراه باز و بسته کردن بیش از حد IndexSearcher وجود دارد، مصرف بالای حافظه است (به ازای هر کاربر مراجعه کننده، یکبار باید ایندکسها در حافظه بارگذاری شوند) و همچنین تاخیر اولیه این بارگذاری و کندی آنرا نیز باید مدنظر داشت.
نتیجه گیری:
برای کار با جستجوگر لوسین نیاز است از الگوی Singleton استفاده شود و تنها یک وهله از این اشیاء بین تردهای مختلف به اشتراک گذاشته شود.
var directory = FSDirectory.Open(new DirectoryInfo(Environment.CurrentDirectory + "\\LuceneIndex")); using (var searcher = new IndexSearcher(directory, readOnly: true)) { //do something ... searcher.Close(); directory.Close(); }
مطابق مستندات رسمی لوسین، این کتابخانه thread-safe است. به این معنا که در آن واحد چندین و چند کاربر میتوانند از یک وهله از شیءهای Reader و Searcher استفاده کنند و نباید به ازای هر جستجو، یکبار این اشیاء را ایجاد و تخریب کرد. البته در اینجا تنها یک Writer در آن واحد میتواند مشغول به کار باشد.
مشکلاتی که به همراه باز و بسته کردن بیش از حد IndexSearcher وجود دارد، مصرف بالای حافظه است (به ازای هر کاربر مراجعه کننده، یکبار باید ایندکسها در حافظه بارگذاری شوند) و همچنین تاخیر اولیه این بارگذاری و کندی آنرا نیز باید مدنظر داشت.
نتیجه گیری:
برای کار با جستجوگر لوسین نیاز است از الگوی Singleton استفاده شود و تنها یک وهله از این اشیاء بین تردهای مختلف به اشتراک گذاشته شود.