عندما يتعلق الأمر بالسرعة الإجمالية ، يتفوق BulkSearch في الأداء على كل مكتبة بحث موجودة ويوفر أيضًا إمكانات بحث مرنة مثل مطابقة الكلمات المتعددة أو التحويلات الصوتية أو المطابقة الجزئية. يعتمد بشكل أساسي على كيفية قيام محرك الأقراص الثابتة بإدارة الملفات في نظام الملفات. تتم إضافة العناصر أو تحديثها أو إزالتها بنفس سرعة البحث عنها، ولكنها تستهلك أيضًا بعض الذاكرة الإضافية. عندما لا يحتاج الفهرس الخاص بك إلى التحديث بشكل متكرر، فقد يكون FlexSearch خيارًا أفضل. يوفر لك BulkSearch أيضًا نموذج معالجة غير متزامن لإجراء الاستعلامات في الخلفية.
المعيار:
المنصات المدعومة:
تعريفات الوحدة المدعومة:
جميع الميزات:
< html >
< head >
< script src =" js/bulksearch.min.js " > </ script >
</ head >
...
ملاحظة: استخدم Bulksearch.min.js للإنتاج و bulksearch.js للتطوير.
استخدم الأحدث من CDN:
< script src =" https://cdn.rawgit.com/nextapps-de/bulksearch/master/bulksearch.min.js " > </ script >
npm install bulksearch
في التعليمات البرمجية الخاصة بك تشمل ما يلي:
var BulkSearch = require ( "bulksearch" ) ;
أو قم بتمرير الخيارات عند الحاجة:
var index = require ( "bulksearch" ) . create ( { /* options */ } ) ;
أيه إم دي
var BulkSearch = require ( "./bulksearch.js" ) ;
وصف | البحث بالجملة | بحث فليكس |
---|---|---|
وصول | مؤشر القراءة والكتابة الأمثل | مؤشر ذاكرة القراءة الأمثل |
ذاكرة | كبير (~ 90 بايت لكل كلمة) | صغير جدًا (~ 2 بايت لكل كلمة) |
الاستخدام |
|
|
الحد من النتائج | نعم | نعم |
ترقيم الصفحات | نعم | لا |
الأساليب العالمية:
طرق الفهرس:
البحث بالجملة. إنشاء (<خيارات>)
var index = new BulkSearch ( ) ;
بدلا من ذلك يمكنك أيضا استخدام:
var index = BulkSearch . create ( ) ;
var index = new BulkSearch ( {
// default values:
type : "integer" ,
encode : "icase" ,
boolean : "and" ,
size : 4000 ,
multi : false ,
strict : false ,
ordered : false ,
paging : false ,
async : false ,
cache : false
} ) ;
اقرأ المزيد: البحث الصوتي، المقارنة الصوتية، تحسين استخدام الذاكرة
فِهرِس. إضافة (معرف، سلسلة)
index . add ( 10025 , "John Doe" ) ;
فِهرِس. بحث (سلسلة | خيارات، <limit|page>، <callback>)
index . search ( "John" ) ;
الحد من النتيجة:
index . search ( "John" , 10 ) ;
تنفيذ الاستعلامات بشكل غير متزامن:
index . search ( "John" , function ( result ) {
// array of results
} ) ;
تمرير المعلمة ككائن:
index . search ( {
query : "John" ,
page : '1:1234' ,
limit : 10 ,
callback : function ( result ) {
// async
}
} ) ;
فِهرِس. التحديث (المعرف، السلسلة)
index . update ( 10025 , "Road Runner" ) ;
فِهرِس. إزالة (المعرف)
index . remove ( 10025 ) ;
index . reset ( ) ;
index . destroy ( ) ;
فِهرِس. الحرف الأول(<خيارات>)
ملاحظة: ستؤدي إعادة التهيئة أيضًا إلى تدمير الفهرس القديم!
التهيئة (بنفس الخيارات):
index . init ( ) ;
التهيئة بخيارات جديدة:
index . init ( {
/* options */
} ) ;
البحث بالجملة. addMatcher({ REGEX: استبدال })
إضافة المطابقات العامة لجميع المثيلات:
BulkSearch . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
إضافة مطابقات خاصة لمثيل محدد:
index . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
تحديد برنامج تشفير مخصص خاص أثناء الإنشاء/التهيئة:
var index = new BulkSearch ( {
encode : function ( str ) {
// do something with str ...
return str ;
}
} ) ;
البحث بالجملة. التسجيل (الاسم، التشفير)
BulkSearch . register ( 'whitespace' , function ( str ) {
return str . replace ( / / g , '' ) ;
} ) ;
استخدم برامج التشفير العالمية:
var index = new BulkSearch ( { encode : 'whitespace' } ) ;
التشفير الخاص:
var encoded = index . encode ( "sample text" ) ;
التشفير العالمي:
var encoded = BulkSearch . encode ( "whitespace" , "sample text" ) ;
BulkSearch . register ( 'mixed' , function ( str ) {
str = this . encode ( "icase" , str ) ; // built-in
str = this . encode ( "whitespace" , str ) ; // custom
return str ;
} ) ;
BulkSearch . register ( 'extended' , function ( str ) {
str = this . encode ( "custom" , str ) ;
// do something additional with str ...
return str ;
} ) ;
index . info ( ) ;
إرجاع معلومات حول الفهرس، على سبيل المثال:
{
"bytes" : 103600 ,
"chunks" : 9 ,
"fragmentation" : 0 ,
"fragments" : 0 ,
"id" : 0 ,
"length" : 7798 ,
"matchers" : 0 ,
"size" : 10000 ,
"status" : false
}
ملاحظة: عندما تكون قيمة التجزئة حوالي 50% أو أعلى، يجب أن تفكر في استخدام cleanup() .
سيؤدي تحسين الفهرس إلى تحرير كافة الذاكرة المجزأة وإعادة بناء الفهرس أيضًا عن طريق التسجيل.
index . optimize ( ) ;
ملاحظة: يمكن أن يؤدي ترقيم الصفحات ببساطة إلى تقليل وقت الاستعلام بعامل 100.
تمكين ترقيم الصفحات عند التهيئة:
var index = BulkSearch . create ( { paging : true } ) ;
تنفيذ الاستعلام وتمرير الحد (العناصر لكل صفحة):
index . search ( "John" , 10 ) ;
ستتضمن الاستجابة كائن ترقيم الصفحات مثل هذا:
{
"current" : " 0:0 " ,
"prev" : null ,
"next" : " 1:16322 " ,
"results" : []
}
توضيح:
"حاضِر" | يتضمن المؤشر إلى الصفحة الحالية. |
"السابق" | يتضمن المؤشر إلى الصفحة السابقة. عندما تكون قيمة هذا الحقل فارغة، فلن يكون هناك المزيد من الصفحات السابقة المتاحة. |
"التالي" | يتضمن المؤشر إلى الصفحة التالية. عندما تكون قيمة هذا الحقل فارغة، فلن يكون هناك أي صفحات متبقية. |
"نتائج" | مجموعة من العناصر المتطابقة. |
تنفيذ الاستعلام وتمرير مؤشر إلى صفحة معينة:
index . search ( "John" , {
page : "1:16322" , // pointer
limit : 10
} ) ;
خيار | قيم | وصف |
---|---|---|
يكتب | "بايت" "قصير" "عدد صحيح" "يطفو" "خيط" | يجب تحديد نوع بيانات المعرفات التي تم تمريرها عند الإنشاء. من المستحسن استخدام أقل نطاق ممكن من البيانات هنا، على سبيل المثال، استخدم "قصير" عندما لا تكون المعرفات أعلى من 65,535. |
ترميز | خطأ شنيع "إيكيس" "بسيط" "متقدم" "إضافي" الوظيفة (السلسلة): السلسلة | نوع الترميز. اختر أحد العناصر المضمنة أو قم بتمرير وظيفة ترميز مخصصة. |
منطقية | "و" "أو" | النموذج المنطقي المطبق عند مقارنة كلمات متعددة. ملحوظة: عند استخدام "أو" تتم مقارنة الكلمة الأولى أيضًا بـ "و". مثال: استعلام مكون من 3 كلمات، وكانت النتائج إما: الكلمة المطابقة 1 و2 والكلمة المطابقة 1 و3. |
مقاس | 2500 - 10000 | حجم القطع. يعتمد ذلك على طول المحتوى، أي قيمة تناسبك بشكل أفضل. يكون طول المحتوى القصير (مثل أسماء المستخدمين) أسرع عندما يصل حجم القطعة إلى 2500. يتم تشغيل النص الأكبر حجمًا بشكل أسرع بحجم قطعة يصل إلى 10000. ملاحظة: يوصى باستخدام الحد الأدنى لحجم القطعة والحد الأقصى لطول المحتوى الذي يجب فهرسته لمنع التجزئة. |
متعدد | حقيقي خطأ شنيع | تمكين معالجة النصوص المتعددة. |
أمر | حقيقي خطأ شنيع | يجب أن تكون الكلمات المتعددة بنفس ترتيب الإدخال المطابق. |
حازم | حقيقي خطأ شنيع | يجب أن تبدأ المطابقات بالضبط مع الاستعلام. |
مخبأ | حقيقي خطأ شنيع | تمكين التخزين المؤقت. |
التشفير | وصف | إيجابيات كاذبة | مستوى الضغط |
---|---|---|---|
خطأ شنيع | قم بإيقاف تشغيل الترميز | لا | لا |
"إيكيس" | ترميز حساس لحالة الأحرف | لا | لا |
"بسيط" | التطبيع الصوتي | لا | ~ 3% |
"متقدم" | التطبيع الصوتي + التحولات الحرفية | لا | ~ 25% |
"إضافي" | التطبيع الصوتي + تحويلات Soundex | نعم | ~ 50% |
السلسلة المرجعية: "بيورن فيليب ماير"
استفسار | بحث مرن | البحث المجمع (iCase) | البحث المجمع (بسيط) | البحث المجمع (متقدم) | البحث المجمع (إضافي) |
---|---|---|---|---|---|
بيورن | نعم | نعم | نعم | نعم | نعم |
بجور | لا | نعم | نعم | نعم | نعم |
بيورن | لا | لا | نعم | نعم | نعم |
بيورن | لا | لا | لا | نعم | نعم |
فيليب | لا | لا | لا | نعم | نعم |
فيليب | لا | لا | لا | نعم | نعم |
björnphillip | لا | لا | نعم | نعم | نعم |
ماير | لا | لا | لا | نعم | نعم |
بيورن ماير | لا | لا | لا | نعم | نعم |
ماير فيليب | لا | لا | لا | نعم | نعم |
بيورن ماير | لا | لا | لا | لا | نعم |
(إيجابيات كاذبة) | نعم | لا | لا | لا | نعم |
ملاحظة: يجب تحديد نوع بيانات المعرفات التي تم تمريرها عند الإنشاء. من المستحسن استخدام أقل نطاق ممكن من البيانات هنا، على سبيل المثال، استخدم "قصير" عندما لا تكون المعرفات أعلى من 65,535.
نوع الهوية | مجموعة من القيم | استخدام الذاكرة لكل ~ 100000 كلمة مفهرسة |
---|---|---|
بايت | 0 - 255 | 4.5 ميجا بايت |
قصير | 0 - 65,535 | 5.3 ميجا بايت |
عدد صحيح | 0 - 4,294,967,295 | 6.8 ميجا بايت |
يطفو | 0 - * (16 رقمًا) | 10 ميغابايت |
خيط | * (غير محدود) | 28.2 ميجابايت |
البحث الشامل للمؤلف: توماس ويكرلينج
الترخيص: ترخيص أباتشي 2.0