"لماذا ليس لدينا محرك بحث لائق يشبه العميل (في المتصفح) الآن؟"
توفر هذه المكتبة ميزات بحث كاملة تشبه Lucene للمتصفح و Node.js.
يستخدم محرك البحث هذا العديد من الخوارزميات المتقدمة لتوفير بحث قوي وفعال على مجموعة كبيرة من المستندات. تشمل الخوارزميات المستخدمة TF-IDF للوزن والترتيب ، BK-TREE للمطابقة الغامضة ، BM25 لتسجيل الأهمية ، ومسافة DAMERAU-LEVENSHTEIN لقياس مسافة التحرير بين مصطلحات البحث. يدعم محرك البحث اللغات المتعددة ويستخدم إزالة الكلمة المتواصلة وإزالة الكلمات لتعزيز كفاءته. كما يدعم تخزين البيانات التعريفية واسترجاعها المرتبطة بالوثائق. يمكنك إنشاء فهرس من مجموعة نصية وبيانات تعريف على حد سواء على جانب العميل والخادم. يمكنك ترطيب وإعادة ترطيب (إعادة استخدام A تم إنشاؤه مسبقًا) الفهرس أيضًا على كل من العميل والخادم.
أرغب في استخدام فهرس يشبه Lucene يستخدم TF-IDF Vectorization و BM25 و BKTREE بالإضافة إلى كرة الثلج التي تنقصها ووقف الكلمات على جانب العميل.
أرغب في إنشاء فهرس البحث إما على جانب العميل أو جانب الخادم (وإعادة ترتيب/إعادة استخدامه على جانب العميل أو الخادم). يجب أن تكون معلومات الدولة صغيرة وضغط.
يجب أن يكون البحث عن النص الكامل سريعًا وفعالًا ، ولا يؤدي إلى الكثير من الإيجابيات الخاطئة أو المنسوجات الخاطئة.
يجب أن يكون محرك البحث قادرًا على التأخير والبحث في البيانات الوصفية التي قد ترتبط بكل مستند.
يجب أن يكون محرك البحث قادرًا على إزالة/تحديث مستندات الفهرس.
يجب أن تكون الحالة قابلة للهجرة.
en , de , fr , es , ja8 KiB nano sized (ESM, gizpped, base library)yarn add clientside-searchnpm install clientside-search import { SearchEngine } from 'clientside-search'
import en from 'clientside-search/en'
// create a new instance of a search engine
const searchEngine = new SearchEngine ( en )
// add some text
const docId1 = searchEngine . addDocument ( 'The quick brown fox jumps over the lazy dog' )
// you can also add UTF8 text, and metadata
const docId2 = searchEngine . addDocument ( 'The quick brown fox jumps over the fence ✅' , {
// metadata with index_ prefix will be indexed for search
index_title : 'Fence' ,
date : new Date ( ) ,
author : 'John Doe' ,
} )
/**
* {
* id:
* score: 1.34,
* metadata: { title: 'Fence', date: '2023-07-12 ...', author: 'John Doe' }
* }
*/
const searchResult = searchEngine . search ( 'Fence' )
// if you want to persist the index state,
// hydratedState is a JSON string that you can persist
const hydratedState = searchEngine . hydrateState ( )
// PLEASE NOTE: The hydrated state does NOT contain the original input text
// It contains an optimized representation of the search index
// However, metadata is kept 1:1
// you can re-hydrate from that state anywhere,
// on the server or the client:
const hydratedEngine = SearchEngine . fromHydratedState ( hydratedState , en )
// equals: searchResult
const searchResultFromHydated = hydratedEngine . search ( 'Fence' ) const { SearchEngine } = require ( 'clientside-search' )
const { en } = require ( 'clientside-search/en' )
// same API like ESM variant