بازبینی جستجوی سایت + SQLite به عنوان موتور جستجو

در سال 2017، من درباره افزودن قابلیت جستجو به وبسایتهایمان (پست وبلاگ) تحقیق کردم و در نهایت به موتور جستجوی Zoom رفتم.
این به خوبی کار کرده است، اما بدون مشکل نیست …
بنابراین، در حالی که داشتم ساختار وبسایتهایمان را بازسازی میکردم، تصمیم گرفتم دوباره به گزینههای این کار نگاه کنم.
کامل “موتور جستجوی سایت به عنوان یک سرویس”
(= خزنده + میزبانی فهرست + رابط کاربری جستجو / ویجت + مدیریت / آمار)
من نگاهی سریع به خدمات دوره 2017 خود داشتم (قیمت 400 سند):
همچنین چند مورد جدید پیدا شد:
چند جنبه (از جمله قیمت) SiteSearch360 جالب تر از بقیه به نظر می رسید، بنابراین تصمیم گرفتم این را امتحان کنم.
من این را به طور کامل در وب سایت های ما اجرا و اجرا کردم.
یکی از چیزهایی که من واقعاً دوست داشتم این بود که به SiteSearch360 میگویید کدام بخش از صفحات وب را با استفاده از انتخابگرهای جستجوی CSS (یا XPath) نمایه کند. من در نهایت از این مفهوم در راه حل خود استفاده کردم (پایین را ببینید).
خزیدن و مدیریت/آمار نیز خوب بود، اما من واقعاً از ادغام UI جستجو راضی نبودم.
جستجوی متن کامل به عنوان یک سرویس
(= میزبانی فهرست + مدیریت / آمار – اما بدون خزنده)
من نگاه کردم به:
این سرویسها بسیار ارزانتر از خدمات «موتور جستجوی کامل سایت بهعنوان سرویس» در بالا هستند، اما برای راهاندازی و اجرا به برنامهنویسی بیشتری (خزنده + رابط کاربری جستجو) نیاز دارند.
در سالهای اخیر متوجه جستجوی Algolia در بسیاری از وبسایتهای مرتبط با برنامهنویسی شدهام (احتمالاً به این دلیل که برای پروژههای منبع باز رایگان است).
من به اندازه کافی کنجکاو بودم که خزنده ساده خود را برنامه ریزی کردم (از جمله ترفند انتخاب کننده پرس و جو CSS که از SiteSearch360 یاد گرفتم) و سعی کردم داده ها را در Algolia بارگذاری کنم – فقط برای اینکه احساس کنم همه اینها چگونه کار می کند.
هنگامی که داده های متنی را استخراج کردم (با خزنده خود) و آن را به JSON تبدیل کردم، فرآیند آپلود به اندازه کافی ساده بود و جستجو در رابط مدیریت Algolia بسیار خوب کار می کرد.
من این را بیشتر از این انجام ندادم، زیرا در این مرحله متوجه شدم که خروجی خزنده من می تواند به راحتی به سایر راه حل های جستجوی متن کامل نیز وارد شود…
نرم افزار اختصاصی سرور جستجوی متن کامل
نگاهی گذرا داشتم
اینها برنامههای نرمافزار سرور جستجوی متن کامل و اختصاصی متن باز/رایگان هستند (که بر روی سرور شخصی شما اجرا میشوند) که برای جستجوی سازمانی با هزاران سند طراحی شدهاند.
اما من واقعاً نمیخواهم برنامه دیگری را روی سرور خود اجرا و نگهداری کنم (یکی از مشکلات من با موتور جستجوی زوم)، و به نظر میرسد که آنها زیاده روی کنند زیرا بزرگترین وبسایت من فقط حدود 400 سند دارد.
جستجوی متن کامل سرور پایگاه داده
همه سرورهای اصلی پایگاه داده (Microsoft SQL Server، MySQL، PostgreSQL، MongoDB) شامل برخی از انواع قابلیت جستجوی متن کامل هستند که به طور بالقوه می تواند برای جستجوی سایت استفاده شود.
البته مانند ارائه دهندگان “جستجوی متن کامل به عنوان یک سرویس”، باید خزنده و رابط کاربری خود را برنامه ریزی کنم.
من قبلاً سرور مایکروسافت SQL را اجرا می کردم، بنابراین نگاهی به ویژگی های جستجوی متن کامل در این داشتم. متأسفانه من نتوانستم راه آسانی برای بیرون آوردن “قطعات” متن نمایه شده با برجسته کردن عبارات جستجو پیدا کنم – که برای نمایش نتایج جستجو بسیار ضروری است.
در مورد سایر سرورهای پایگاه داده ذکر شده در بالا – باز هم – من واقعاً نمی خواهم برنامه دیگری را روی سرور خود اجرا و نگهداری کنم، بنابراین این موارد را بیشتر در نظر نگرفتم.
SQLite
در سالهای اخیر، در موقعیتهای بیشتر و بیشتری به سراغ SQLite رفتهام که در گذشته از سرور Microsoft SQL استفاده میکردم. SQLite اغلب هم سریعتر و هم راحت تر کار می کند.
معلوم شد که SQLite جستجوی کامل متن را نیز انجام می دهد.
و بر خلاف مایکروسافت SQL Server، توابع “هایلایت” و “قطعه” را برای تولید متن برای لیست نتایج جستجو تعبیه کرده است.
بنابراین با ترکیب خزنده خودم (شامل ترفند “انتخاب کننده پرس و جو CSS” از SiteSearch360)، جستجوی متن کامل SQLite، و برخی از الگوها/کدهای UI جستجوی موجود از ادغام موتور جستجوی زوم من، به سرعت توانستم یک سیستم جستجوی کامل سایت را ایجاد کنم. – بدون معرفی سرویسهای پولی جدید، یا برنامههای کاربردی جدیدی که روی سرور ما اجرا میشوند (SQLite فقط یک فایل کتابخانه / .dll است که قبلاً در وبسایتهای ما استفاده میشود).
در واقع در مقایسه با تنظیمات قبلی موتور جستجوی زوم، پیچیدگی کاهش یافته است و من کنترل بسیار بهتری بر روند خزیدن دارم.
و عملکرد شگفت انگیز است – جستجوها در 1-2 میلی ثانیه انجام می شوند.
نکاتی برای استفاده از جستجوی متن کامل SQLite با Net
من از بسته رسمی SQLite NuGet System.Data.SQLite.Core استفاده می کنم که شامل قابلیت جستجوی کامل متن (FTS5) است.
من خوانده ام که جستجوی متن کامل در فورک مایکروسافت “Microsoft.Data.Sqlite” گنجانده نشده است.
همچنین عملکرد جستجوی متن کامل یک “افزونه” است که باید فعال و بارگیری شود (پس از باز کردن اتصال پایگاه داده) با تماس:
connection.EnableExtensions(True)
connection.LoadExtension("SQLite.Interop.dll", "sqlite3_fts5_init")