
سريع ، قابلة للتمديد والوقوف بمفرده محرك البحث عن نص جافا سكريبت النقي. العقدة. دنو. متصفح.
npm install thinker-fts --save
JavaScript ESM
import Thinker from "thinker-fts" ;
const thinker = Thinker ( ) ;JavaScript Commonjs
const Thinker = require ( "thinker-fts" ) ;
const thinker = Thinker ( ) ;TypeScript
لاحظ أن التصدير الافتراضي فقط متاح في Node.js TypeScript ، حيث يتم استخدام وحدة CommonJS داخليًا.
import Thinker from "thinker-fts" ;
const thinker = Thinker ( ) ;جافا سكريبت
import Thinker from "https://cdn.jsdelivr.net/gh/hexagon/thinker-fts@2/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;أو
import Thinker from "https://deno.land/x/thinker/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;thinker.min.js (UMD و قائمة القائمة) أو thinker.min.mjs . لاستخدامها كوحدة UMD (تقف بمفردها ، متطلبات وما إلى ذلك)
< script src =" https://cdn.jsdelivr.net/npm/thinker-fts/dist/thinker.min.js " > </ script >لاستخدامها كمعدل ES
< script type =" module " >
import Thinker from "https://cdn.jsdelivr.net/npm/thinker-fts/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;
// ... see usage section ...
</ script > سيبدو إعداد بسيط مع التغذية والبحث شيء مثل المقتطف أدناه
// See installation section for exact procedure depending on environment, this is Node.js/CommonJS
const Thinker = require ( 'thinker-fts' ) ,
const thinker = Thinker ( ) ;
// Connect standard ranker
thinker . ranker = Thinker . rankers . standard ( ) ;
// Feed thinker with an array of documents formatted like { id: id, fields: [textfield, textfield] }
thinker . feed ( [
{ id : 1 , fields : [ 'Lorem' , 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' ] } ,
{ id : 2 , fields : [ 'Ipsum' , 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.' ] }
] ) ;
// Search for text
var result = thinker . find ( 'ut in' ) ;
// Show result
console . log ( result ) ;نتائج:
{
expressions: [
{
original: 'ut',
interpretation: [Object],
suggestion: undefined,
modifier: undefined,
exactMode: false
},
{
original: 'in',
interpretation: [Object],
suggestion: undefined,
modifier: undefined,
exactMode: false
}
],
performance: {
find: 1.107075,
rank: 0.598558,
sort: 0.688598,
filter: 0.060182,
total: 2.639159
},
documents: [
{ id: 2, weight: 1.5, expressions: [Object] },
{ id: 1, weight: 1.5, expressions: [Object] }
],
totalHits: 2,
returnedHits: 2
}
من فضلك لا تضطر إلى توصيل مرتبة ، وإلا فإن العثور على مجموعة النتائج. رانكر بناء مجموعة النتائج.
يتم تجاوز التكوين الافتراضي للمفكرين من خلال تزويد كائن خيارات لمؤسسة المفكرين.
// Options only available at initialization
var thinker = Thinker ( {
characters : / ([a-zA-Z0-9]*) / g ,
caseSensitive : false ,
minWildcardWordLen : 3 ,
maxWildcardWordLen : 32 ,
minWordLen : 2 ,
maxWordLen : 32 ,
suggestionMinWordCount : 6 ,
enableSuggestions : false ,
optionalPlusFromExpressions : 1 ,
concatenateWords : 1
} ) ;التعبير المنتظم عن توضيح الأحرف التي يجب التقاطها ككلمات ، إذا كنت (كمثال) تريد استخدام المفكر مع الأحرف السويدية ، فسيكون الإعداد
{ characters : / ([a-zA-Z0-9åäöÅÄÖ]*) / g }توضيحي الذات ، صحيح أو خطأ
يقوم المفكر دائمًا بالمطابقة الجزئية ، ويحدد MinwildCardWordlen مدى أجزاء قصيرة من الكلمات التي يجب فهرستها. الإعداد الافتراضي هو 4 الذي يطابق "XPRE" مع "التعبير" ، ولكن ليس "قبل". يمكن أن يعطي وضع هذا قصيرًا جدًا قدرًا غير قابل للعيان من المباريات الزائفة وقد يؤثر على الأداء إذا تم استخدامه مع رابطة ثقيلة.
كما هو مذكور أعلاه ، ولكن ماكس.
أقصر كلمة للفهرس ، الافتراضي هو 2 الذي يضيف "Ex" إلى الفهرس ، ولكن ليس "E"
كما هو مذكور أعلاه ، ولكن ماكس.
حدد عدد المرات التي يجب أن توجد فيها كلمة في الفهرس لاستخدامها للاقتراحات. الإعدادات الافتراضية إلى 6.
إذا تم تمكين ذلك ، فسيستخدم المفكر كلمات غير معالجة من النصوص التي تم إدخالها لتقديم اقتراحات عندما لا تعطي التعبيرات تطابقًا مباشرًا.
هذا ما سيبدو عليه النتائج.
سيتم إعادة تسمية ، أعدك.
هذا هو عدد الكلمات التي يجب أن تكون هناك في التعبير قبل أن تصبح كل الكلمات اختيارية. الإعدادات الافتراضية إلى 1 (معطل).
إذا قمت بتعيين هذا على 4 ، والبحث عن تعبير من ثلاث كلمات ، فسوف تحتاج جميع الكلمات إلى وجودها في المستند إلى مطابقة Giva e. في الخلفية what you want أن يصبح +what +you +want . إذا قمت بتعبير أربع كلمات ، فإن كل الكلمات تصبح اختيارية مثل Usuabl.
عندما يتم ضبط هذه الخاصية على أكبر من واحدة ، سيتم إدراج الكلمات المعززة في الفهرس ، والتي تتكون من الكلمة الحالية والحالية. إذا تم تعيين هذه الخاصية على 3 وكان الحقل هو "أريد ملفات تعريف الارتباط اليوم" ، فإن البحث عن iwantcookies أو wantcookiestoday أو wantcookies سيعطي مباراة.
{
interpretation : {
original : 'expression' ,
...
} ,
...
suggestion : 'expression' ,
...
} تم تكوين Ranker عن طريق تمرير كائن خيارات إلى مُنشئه.
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( {
directHit : 1 ,
partialHit : 0.5 ,
eachPartialExpressionFactor : 1.5 ,
eachDirectExpressionFactor : 2 ,
fields : {
1 : { weight : 4 , boostPercentage : false } ,
2 : { weight : 2 , boostPercentage : false }
}
} ) ;
thinker . ranker = ranker ;عامل للوزن عندما يتطابق التعبير مع كلمة مباشرة. جزئيا
العامل الذي يتم تطبيقه على مستندات إجمالي الوزن عندما تعطي التعبيرات تطابقًا جزئيًا. إذا كان الاستعلام يتكون من ثلاثة تعبيرات تتطابق مع هذا العامل جزئيًا ، فسيتم تطبيقه ثلاث مرات.
كما هو مذكور أعلاه ، ولكن مع الزيارات المباشرة.
الكائن الذي يحدد وزنًا أساسيًا مختلفًا لمطابقة في كل حقل من المستند ، إذا كانت مستنداتك تبدو
var docs = [
{ id : 1 , fields : [ "This is the title" , "This is the ingress" , "This is the text" ] } ,
...
] ;وتبدو أوزان الحقول الخاصة بك
fields: {
0 : { weight : 4 , boostPercentage : true } ,
1 : { weight : 2 , boostPercentage : false } ,
2 : { weight : 2 , boostPercentage : false }
}ستحصل المباريات في حقل العنوان على وزن أربعة ، وستحصل المباريات في حقل الدخول على اثنين وما إلى ذلك.
بالإضافة إلى ذلك ، نظرًا لأن BoostperCenge يتم تعيينه على True for Title ، يمكن أن يصل هذا الوزن إلى ضعفه إذا كانت المباراة هي الكلمة الوحيدة في العنوان.
على سبيل المثال ، إذا كان العنوان هو "هذا هو الأشياء" ، ونبحث عن "الأشياء" ، والوزن الأساسي هو أربعة ، ويتم مضاعفة ذلك بعامل محسوب
1 كلمة متطابقة ، 4 كلمات تماما
1+1/4
1+0.25
يعطي 1.25 في عامل التعزيز
المعالجات الميدانية هي وظائف يتم تطبيقها على كل حقل يتم تغذية المفكر ، قبل الانتهاء من الفهرسة.
Stripts HTML ، وترك الروابط (a href = " ") وأوصاف الصورة (img alt = " ") في النتيجة التي تم إرجاعها.
مثال على إعداد المفكر مع تجريد Ranker القياسي و HTML
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stripHtml = Thinker . processors . stripHtml ( ) ;
thinker . addFieldProcessor ( stripHtml ) ;
thinker . ranker = ranker ; معالجات النصوص هي وظائف يتم تطبيقها على كل كلمة يتم تغذيتها. يتم تطبيقها بنفس الطريقة عند الفهرسة وعند الاستعلام.
تتم معالجة معالجات النصوص بنفس الطريقة التي يتم بها تكوينها ، ضع ذلك في الاعتبار عند إعداد الأشياء. إذا قمت على سبيل المثال بقع الكلمة قبل تطبيق WordForms ، فأنت بحاجة إلى استخدام الكلمات الجذعية في قائمة WordForms.
يحل محل الكلمات المختارة مع الآخرين ، مما يجعل المرادفات مساوية لبعضها البعض بشكل فعال.
مثال على إعداد المفكر مع Ranker و WordForms القياسية
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
wordforms = Thinker . processors . wordforms ( {
"we" : "us" ,
"they" : "them" ,
"github" : "repository"
} ) ;
thinker . addWordProcessor ( wordforms ) ;
thinker . ranker = ranker ;يزيل الكلمات التي لا تعطي دقة أفضل ، عادة ما تكون أشياء مثل "و" ، أنا "،" ، "،" نحن "،" يمكن ". يمكن أن تؤدي إضافة الكلمات الأكثر شيوعًا هنا إلى تسريع القذائف قليلاً ، وحفظ بعض ذاكرة الوصول العشوائي.
مثال على إعداد المفكر مع الرابطة القياسية وإيقاف الكلمات
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stopwords = Thinker . processors . stopwords ( {
"artikel" : true ,
"bemötande" : true
} ) ;
thinker . addWordProcessor ( stopwords ) ;
thinker . ranker = ranker ;يجد ساق كل كلمة مفهرسة ، ستصبح "أجهزة الكمبيوتر" "كمبيوتر" ، "منظمة" ستصبح "تنظيم" وما إلى ذلك. هذا يحسن دقة المباريات والترجمة بشكل كبير.
تتمثل الميزة الاختيارية في STEMMERS في توفير قائمة بالكلمات التي لا ترغب في الانخفاض فيها.
يوجد حاليًا نوعان من الجذعية ، السويديين من خلال نسخة مخصصة من خوارزمية كرة الثلج ، والإنجليزية من خلال خوارتر بورتر.
مثال على إعداد المفكر مع رابطة قياسية ونقام اللغة الإنجليزية وبعض كلمات توقف STEMMER.
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stemmer = Thinker . processors . stemmers . english ( {
"stemmer" : true ,
"stemming" : true ,
"dontstemthiseither" : true ,
"leonardo" : true ,
"anders" , true
} ) ;
thinker . addWordProcessor ( stemmer ) ;
thinker . ranker = ranker ;مثال على إعداد المفكر مع الكلمات القياسية ، والنثى السويدي ، و STEMMER إيقاف الكلمات
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stemmer = Thinker . processors . stemmers . swedish ( {
"berta" : true ,
"jonas" : true ,
"leonardo" : true ,
"anders" : true
} ) ;
thinker . addWordProcessor ( stemmer ) ;
thinker . ranker = ranker ;تقوم Soundex قبل المعالجة بالكلمات بحيث تتطابق الكلمات التي تبدو على حد سواء مع بعضها البعض.
مثال على إعداد المفكر مع معالجة Soundex.
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
soundex = Thinker . processors . soundex ( ) ;
thinker . addWordProcessor ( soundex ) ;
thinker . ranker = ranker ; ملاحظة: للاستخدام العادي ، يتم تجميع جميع التبعيات المطلوبة
Fast-Levenshtein (https://github.com/hiddentao/fast-levenshtein)
STEMMER (https://github.com/wooorm/stemmer)
Node-Soundex (https://github.com/louist/node-soundex)
MOCHA (https://github.com/mochajs/mocha)
يجب (https://github.com/shouldjs/should.js)
مسدس
Pehr Boman
مرخصة بموجب ترخيص معهد ماساتشوستس للتكنولوجيا