محلل بسيط لبناء جملة استعلام البحث المتقدم.
يقوم بتوزيع سلسلة مثل هذا:
from:[email protected],[email protected] to:me subject:vacations date:1/10/2013-15/04/2014 photos
ويحوله إلى كائن مثل هذا:
{
from : [ '[email protected]' , '[email protected]' ] ,
to : 'me' ,
subject : 'vacations' ,
date : {
from : '1/10/2013' ,
to : '15/04/2014'
} ,
text : 'photos' ,
offsets :
[ { keyword : 'from' , value : '[email protected],[email protected]' , offsetStart : 0 , offsetEnd : 32 } ,
{ keyword : 'to' , value : 'me' , offsetStart : 33 , offsetEnd : 38 } ,
{ keyword : 'subject' , value : 'vacations' , offsetStart : 39 , offsetEnd : 56 } ,
{ keyword : 'date' , value : '1/10/2013-15/04/2014' , offsetStart : 57 , offsetEnd : 82 } ,
{ text : 'photos' , offsetStart : 83 , offsetEnd : 89 } ]
}
$ npm install search-query-parser
var searchQuery = require ( 'search-query-parser' ) ;
var query = 'from:[email protected],[email protected] to:me subject:vacations date:1/10/2013-15/04/2014 photos' ;
var options = { keywords : [ 'from' , 'to' , 'subject' ] , ranges : [ 'date' ] }
var searchQueryObj = searchQuery . parse ( query , options ) ;
// searchQueryObj.from is now ['[email protected]', '[email protected]']
// searchQueryObj.to is now 'me'
// searchQueryObj.date is now {from: '1/10/2013', to: '15/04/2014'}
// searchQueryObj.text is now 'photos'
يمكنك تكوين الكلمات الأساسية والنطاقات التي يجب أن يقبلها المحلل اللغوي باستخدام وسيطة الخيارات. يقبل 5 قيم:
keywords
التي يمكن فصلها بفواصل (،). يقبل مجموعة من السلاسل.ranges
التي يمكن فصلها بواصلة (-). يقبل مجموعة من السلاسل.tokenize
، الذي يتحكم في سلوك مصطلحات البحث عن النص. إذا تم التعيين على true
، فسيتم إرجاع المصطلحات النصية غير المتعلقة بالكلمات الرئيسية كمصفوفة من السلاسل حيث يكون كل مصطلح في المصفوفة كلمة مفصولة بمسافات بيضاء، أو مصطلح متعدد الكلمات محاطًا بعلامات اقتباس مفردة أو مزدوجة.alwaysArray
، قيمة منطقية تتحكم في سلوك الاستعلام الذي يتم إرجاعه. إذا تم التعيين على true
، فستكون جميع الكلمات الرئيسية المطابقة دائمًا عبارة عن صفائف بدلاً من سلاسل. إذا تم ضبطها على false
فستكون سلاسل إذا تطابقت مع قيمة واحدة. الافتراضيات false
.offsets
، منطقية تتحكم في سلوك الاستعلام الذي تم إرجاعه. إذا تم ضبطه على true
، فسيحتوي الاستعلام على كائن الإزاحات. إذا تم تعيينه على false
، فلن يحتوي الاستعلام على كائن الإزاحات. الافتراضيات إلى true
. إذا لم يتم تحديد أي كلمات رئيسية أو نطاقات، أو في حالة عدم وجود أي كلمات رئيسية أو نطاقات في استعلام البحث المحدد، فسوف يقوم searchQuery.parse
بإرجاع سلسلة إذا كان tokenize
خطأ، أو مجموعة من السلاسل تحت text
الرئيسي إذا كان tokenize
صحيحًا.
var searchQuery = require ( 'search-query-parser' ) ;
var query = 'a query with "just text"' ;
var parsedQuery = searchQuery . parse ( query ) ;
// parsedQuery is now 'a query with "just text"'
var options = { keywords : [ 'unused' ] } ;
var parsedQueryWithOptions = searchQuery . parse ( query , options ) ;
// parsedQueryWithOptions is now 'a query with "just text"'
var options2 = { tokenize : true } ;
var parsedQueryWithTokens = searchQuery . parse ( query , options2 ) ;
// parsedQueryWithTokens is now: ['a', 'query', 'with', 'just text']
يمكنك أيضًا استخدام صيغة الاستبعاد، مثل -from:[email protected] name:hello,world
. يعمل هذا أيضًا مع المصطلحات النصية التي لا تحتوي على كلمات رئيسية عند تعيين tokenize
على true
.
{
name : [ 'hello' , 'world' ] ,
exclude : {
from : [ '[email protected]' ]
}
}
في بعض الأحيان، قد يكون التحقق مما إذا كانت الكلمة الرئيسية تحتوي على سلسلة أم لا أمرًا مفرطًا وعرضة للأخطاء؛ غالبًا ما يكون من الأسهل توقع أن كل شيء عبارة عن مصفوفة حتى لو كان ذلك يعني إجراء حلقات تكرار واحدة كثيرًا.
var searchQuery = require ( 'search-query-parser' ) ;
var query = 'test:helloworld fun:yay,happy' ;
var options = { keywords : [ 'test' , 'fun' ] } ;
var parsedQueryWithOptions = searchQuery . parse ( query , options ) ;
// parsedQueryWithOptions is now:
// {
// test: 'helloworld',
// fun: ['yay', 'happy']
// }
var optionsAlwaysArray = { keywords : [ 'test' , 'fun' ] , alwaysArray : true } ;
var parsedQueryWithOptions = searchQuery . parse ( query , options ) ;
// parsedQueryWithOptions is now:
// {
// test: ['helloworld'], //No need to check whether test is a string or not!
// fun: ['yay', 'happy']
// }
يمكن أن يصبح كائن الإزاحات ضخمًا جدًا مع استعلامات البحث الطويلة التي قد تكون استخدامًا غير ضروري للمساحة إذا لم تكن هناك وظيفة تعتمد عليه. يمكن ببساطة إيقاف تشغيله باستخدام خيار offsets: false
.
في أي وقت، يمكنك العودة وتصنيف استعلام البحث الذي تم تحليله. قد يكون هذا مفيدًا إذا كنت ترغب في التعامل مع كائن استعلام البحث الذي تم تحليله.
var searchQuery = require ( 'search-query-parser' ) ;
var query = 'from:[email protected],[email protected] to:me subject:vacations date:1/10/2013-15/04/2014 photos' ;
var options = { keywords : [ 'from' , 'to' , 'subject' ] , ranges : [ 'date' ] }
var searchQueryObj = searchQuery . parse ( query , options ) ;
searchQueryObj . to = 'you' ;
var newQuery = searchQuery . stringify ( query , options ) ;
// newQuery is now: photos from:[email protected],[email protected] to:you subject:vacations date:1/10/2013-15/04/2014
تتوفر أنواع النصوص المكتوبة لهذه المكتبة في دليل docs
. تصفح وثائق النوع هنا.
يتم إنشاء الوثائق باستخدام node_modules/.bin/typedoc index.d.ts
تمت كتابة الاختبارات الـ 29 باستخدام إطار عمل اختبار BDD must.js، وتم تشغيلها باستخدام mocha.
قم بتشغيل npm install should
و npm install -g mocha
لتثبيتهما معًا.
قم بإجراء الاختبارات باستخدام make test
.
رخصة معهد ماساتشوستس للتكنولوجيا (MIT)
حقوق الطبع والنشر (ج) 2014
يُمنح الإذن مجانًا لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة به ("البرنامج")، للتعامل في البرنامج دون قيود، بما في ذلك، على سبيل المثال لا الحصر، حقوق الاستخدام والنسخ والتعديل والدمج. ونشر و/أو توزيع وترخيص من الباطن و/أو بيع نسخ من البرنامج، والسماح للأشخاص الذين تم توفير البرنامج لهم بالقيام بذلك، وفقًا للشروط التالية:
يجب تضمين إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.
يتم توفير البرنامج "كما هو"، دون أي ضمان من أي نوع، صريحًا أو ضمنيًا، بما في ذلك، على سبيل المثال لا الحصر، ضمانات القابلية للتسويق والملاءمة لغرض معين وعدم الانتهاك. لا يتحمل المؤلفون أو أصحاب حقوق الطبع والنشر بأي حال من الأحوال المسؤولية عن أي مطالبة أو أضرار أو مسؤولية أخرى، سواء في إجراء العقد أو الضرر أو غير ذلك، الناشئة عن أو خارج أو فيما يتعلق بالبرنامج أو الاستخدام أو المعاملات الأخرى في برمجة.