التثبيت | نظرة عامة | الترميز | الجذعية | وقف الكلمات | فهرس البحث | استراتيجية الفهرس
يمكّن بحث Js عمليات البحث الفعالة من جانب العميل لكائنات JavaScript وJSON. وهو متوافق مع ES5 ولا يتطلب jQuery أو أي مكتبات خارجية أخرى.
بدأ بحث Js كتطبيق خفيف الوزن لـ Lunr JS، مما يوفر تحسينات في أداء وقت التشغيل وحجم ملف أصغر. وقد توسعت منذ ذلك الحين لتشمل مجموعة ميزات غنية تدعم التفرع وكلمات التوقف وتصنيف TF-IDF.
فيما يلي بعض معايير JS Perf التي تقارن بين مكتبتي البحث. (شكرًا لـ Olivernn على تعديل جانب Lunr للحصول على مقارنة أفضل!)
إذا كنت تبحث عن أداة بحث JS أبسط ومحسنة لعامل الويب، فراجع js-worker-search.
يمكنك التثبيت باستخدام Bower أو NPM كما يلي:
npm install js-search
bower install js-search
على مستوى عالٍ، يمكنك تكوين بحث Js عن طريق إخباره بالحقول التي يجب فهرستها للبحث ثم إضافة الكائنات المراد البحث فيها.
على سبيل المثال، الاستخدام البسيط لبحث JS سيكون كما يلي:
import * as JsSearch from 'js-search' ;
var theGreatGatsby = {
isbn : '9781597226769' ,
title : 'The Great Gatsby' ,
author : {
name : 'F. Scott Fitzgerald'
} ,
tags : [ 'book' , 'inspirational' ]
} ;
var theDaVinciCode = {
isbn : '0307474275' ,
title : 'The DaVinci Code' ,
author : {
name : 'Dan Brown'
} ,
tags : [ 'book' , 'mystery' ]
} ;
var angelsAndDemons = {
isbn : '074349346X' ,
title : 'Angels & Demons' ,
author : {
name : 'Dan Brown' ,
} ,
tags : [ 'book' , 'mystery' ]
} ;
var search = new JsSearch . Search ( 'isbn' ) ;
search . addIndex ( 'title' ) ;
search . addIndex ( [ 'author' , 'name' ] ) ;
search . addIndex ( 'tags' )
search . addDocuments ( [ theGreatGatsby , theDaVinciCode , angelsAndDemons ] ) ;
search . search ( 'The' ) ; // [theGreatGatsby, theDaVinciCode]
search . search ( 'scott' ) ; // [theGreatGatsby]
search . search ( 'dan' ) ; // [angelsAndDemons, theDaVinciCode]
search . search ( 'mystery' ) // [angelsAndDemons, theDaVinciCode]
الترميز هو عملية تقسيم النص (مثل الجمل) إلى رموز أصغر يمكن البحث فيها (مثل الكلمات أو أجزاء من الكلمات). يوفر Js Search أداة رمزية أساسية من المفترض أن تعمل بشكل جيد للغة الإنجليزية ولكن يمكنك توفير أداة خاصة بك مثل:
search . tokenizer = {
tokenize ( text /* string */ ) {
// Convert text to an Array of strings and return the Array
}
} ;
الاستنباط هو عملية تقليل رموز البحث إلى جذرها (أو "جذعها") بحيث تستمر عمليات البحث عن أشكال مختلفة من الكلمة في تحقيق نتائج. على سبيل المثال، يمكن اختصار كلمات "بحث" و"بحث" و"بحث" إلى كلمة "بحث" في الأصل.
لا ينفذ Js Search مكتبة جذعية خاصة به ولكنه يدعم الاشتقاق من خلال استخدام مكتبات الطرف الثالث.
لتمكين الـ Stemming، استخدم StemmingTokenizer
كما يلي:
var stemmer = require ( 'porter-stemmer' ) . stemmer ;
search . tokenizer =
new JsSearch . StemmingTokenizer (
stemmer , // Function should accept a string param and return a string
new JsSearch . SimpleTokenizer ( ) ) ;
الكلمات المتوقفة شائعة جدًا (على سبيل المثال a، an، و، of) وغالبًا ما لا يكون لها أي معنى دلالي. بشكل افتراضي، لا يقوم بحث Js بتصفية هذه الكلمات، ولكن يمكن تمكين التصفية باستخدام StopWordsTokenizer
كما يلي:
search . tokenizer =
new JsSearch . StopWordsTokenizer (
new JsSearch . SimpleTokenizer ( ) ) ;
افتراضيًا، يستخدم بحث Js نسخة معدلة قليلاً من كلمات التوقف الخاصة بسجل Google والمدرجة في www.ranks.nl/stopwords. يمكنك تعديل قائمة كلمات التوقف هذه عن طريق إضافة أو إزالة قيم من كائن JsSearch.StopWordsMap
كما يلي:
JsSearch . StopWordsMap . the = false ; // Do not treat "the" as a stop word
JsSearch . StopWordsMap . bob = true ; // Treat "bob" as a stop word
لاحظ أن كلمات التوقف مكتوبة بأحرف صغيرة وبالتالي فإن استخدام مطهر حساس لحالة الأحرف قد يمنع إزالة بعض كلمات التوقف.
هناك نوعان من فهارس البحث مع js-search
.
مصطلح التردد - تكرار المستند العكسي (أو TF-IDF) عبارة عن إحصائية رقمية تهدف إلى عكس مدى أهمية كلمة (أو كلمات) في مستند داخل مجموعة نصية. تزداد قيمة TF-IDF بشكل متناسب مع عدد المرات التي تظهر فيها الكلمة في المستند ولكن يتم إزاحتها بتكرار الكلمة في المجموعة. وهذا يساعد على التكيف مع حقيقة أن بعض الكلمات (على سبيل المثال، و، أو،) تظهر بشكل متكرر أكثر من غيرها.
افتراضيًا، يدعم Js Search تصنيف TF-IDF ولكن يمكن تعطيله لأسباب تتعلق بالأداء إذا لم يكن ذلك مطلوبًا. يمكنك تحديد تطبيق ISearchIndex
بديل لتعطيل TF-IDF، كما يلي:
// default
search . searchIndex = new JsSearch . TfIdfSearchIndex ( ) ;
// Search index capable of returning results matching a set of tokens
// but without any meaningful rank or order.
search . searchIndex = new JsSearch . UnorderedSearchIndex ( ) ;
هناك ثلاث إستراتيجيات فهرس مجمعة مع js-search
.
تقوم PrefixIndexStrategy
بفهرسة عمليات البحث عن البادئات. (على سبيل المثال، يتم فهرسة المصطلح "cat" على أنه "c" و"ca" و"cat" مما يسمح بالبحث عن البادئات).
فهارس AllSubstringsIndexStrategy
لجميع السلاسل الفرعية. في الكلمات الأخرى، "c" و"ca" و"cat" و"a" و"at" و"t" جميعها تتطابق مع "cat".
فهارس ExactWordIndexStrategy
لمطابقات الكلمات الدقيقة. على سبيل المثال، سوف يتطابق "bob" مع "bob jones" (لكن "bo" لن يتطابق).
افتراضيًا، يدعم Js Search فهرسة البادئات ولكن هذا قابل للتكوين. يمكنك تحديد تطبيق IIndexStrategy
بديل لتعطيل فهرسة البادئة، كما يلي:
// default
search . indexStrategy = new JsSearch . PrefixIndexStrategy ( ) ;
// this index strategy is built for all substrings matches.
search . indexStrategy = new JsSearch . AllSubstringsIndexStrategy ( ) ;
// this index strategy is built for exact word matches.
search . indexStrategy = new JsSearch . ExactWordIndexStrategy ( ) ;