
เอ็นจิ้นค้นหาข้อความแบบเต็มรูปแบบที่รวดเร็วขยายได้และยืนอยู่คนเดียว โหนด Deno. เบราว์เซอร์
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 ( ) ;ตัวพิมพ์ใหญ่
โปรดทราบว่ามีเพียงการส่งออกเริ่มต้นเท่านั้นใน 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 และ standalone) หรือ thinker.min.mjs (es-module) จาก Dist/ Folder หากต้องการใช้เป็นโมดูล 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
}
โปรดอย่าว่าคุณ ต้อง เชื่อมต่อ Ranker มิฉะนั้นพบว่าจะไม่ให้ชุดผลลัพธ์ Ranker สร้างชุดผลลัพธ์
การกำหนดค่าเริ่มต้นของนักคิดจะถูกแทนที่โดยการจัดหาวัตถุตัวเลือกให้กับตัวสร้างนักคิด
// 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' กับ 'นิพจน์' แต่ไม่ใช่ 'pre' การตั้งค่าสั้นเกินไปนี้อาจให้จำนวนการจับคู่ปลอมและอาจส่งผลกระทบต่อประสิทธิภาพหากใช้กับผู้จัดอันดับหนัก
เหมือนกับข้างบน แต่สูงสุด
คำที่สั้นที่สุดในการดัชนีค่าเริ่มต้นคือ 2 ซึ่งเพิ่ม 'ex' ในดัชนี แต่ไม่ใช่ 'e'
เหมือนกับข้างบน แต่สูงสุด
ตั้งค่าคำกี่ครั้งในดัชนีที่จะใช้สำหรับคำแนะนำ ค่าเริ่มต้นเป็น 6
หากเปิดใช้งานสิ่งนี้นักคิดจะใช้คำที่ไม่ได้ประมวลผลจากข้อความที่ป้อนเข้าเพื่อให้คำแนะนำเมื่อนิพจน์ไม่ตรงกับการจับคู่โดยตรง
นี่คือสิ่งที่ผลลัพธ์การแสดงออก [n] จะมีลักษณะเหมือนเมื่อคุณค้นหา 'exression' (หายไป p)
ฉันจะเปลี่ยนชื่อฉันสัญญา
นี่คือจำนวนคำที่ควรมีในการแสดงออกก่อนที่ทุกคำจะกลายเป็นทางเลือก ค่าเริ่มต้นเป็น 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 }
}การจับคู่ในฟิลด์ชื่อเรื่องจะได้รับน้ำหนักสี่นัดการแข่งขันในสนาม Ingress จะได้รับน้ำหนักสอง ฯลฯ
นอกจากนี้เมื่อ boostpercentage ถูกตั้งค่าเป็นจริงสำหรับชื่อเรื่องน้ำหนักนั้นสามารถเพิ่มขึ้นเป็นสองเท่าถ้าการแข่งขันเป็นคำเดียวในชื่อ
ตัวอย่างเช่นหากชื่อเรื่องคือ 'นี่คือสิ่งของ' และเราค้นหา 'สิ่งของ' น้ำหนักพื้นฐานคือสี่และนั่นคือคูณด้วยปัจจัยที่คำนวณได้
1 คำที่ตรงกัน 4 คำโดยสิ้นเชิง
1+1/4
1+0.25
ให้ 1.25 ในปัจจัย boostpercentage
โปรเซสเซอร์ภาคสนามเป็นฟังก์ชั่นที่ใช้กับแต่ละฟิลด์ที่นักคิดได้รับก่อนที่จะทำการจัดทำดัชนี
stripts html, ออกจากลิงก์ (a href = " ") และคำอธิบายภาพ (img alt = " ") ในผลลัพธ์ที่ส่งคืน
ตัวอย่างการตั้งค่านักคิดด้วยมาตรฐาน Ranker และ HTML-stripping
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stripHtml = Thinker . processors . stripHtml ( ) ;
thinker . addFieldProcessor ( stripHtml ) ;
thinker . ranker = ranker ; ตัวประมวลผลคำเป็นฟังก์ชั่นที่ใช้กับแต่ละคำที่นักคิดได้รับ พวกเขาจะถูกนำไปใช้ในลักษณะเดียวกันทั้งเมื่อทำการจัดทำดัชนีและเมื่อทำการสืบค้น
ตัวประมวลผลคำได้รับการจัดการในลักษณะเดียวกับที่พวกเขาได้รับการกำหนดค่าโปรดจำไว้เมื่อตั้งค่าสิ่งต่าง ๆ หากคุณเป็นตัวอย่างที่เกิดขึ้นก่อนที่จะใช้ WordForms คุณจะต้องใช้คำพูดในรายการ WordForms
แทนที่คำที่เลือกกับผู้อื่นทำให้มีความหมายเหมือนกันอย่างมีประสิทธิภาพ
ตัวอย่างการตั้งค่านักคิดที่มีมาตรฐานและคำศัพท์มาตรฐาน
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
wordforms = Thinker . processors . wordforms ( {
"we" : "us" ,
"they" : "them" ,
"github" : "repository"
} ) ;
thinker . addWordProcessor ( wordforms ) ;
thinker . ranker = ranker ;ลบคำที่ไม่ให้ความแม่นยำที่ดีกว่าปกติเช่น 'และ', 'ฉัน', 'พวกเขา', 'เรา', 'สามารถ' ได้ การเพิ่มคำทั่วไปที่พบบ่อยที่สุดที่นี่สามารถเพิ่มความเร็วให้กับคัมภีร์ไบเบิลเล็กน้อยและบันทึก RAM บางส่วน
ตัวอย่างการตั้งค่านักคิดด้วยคำศัพท์มาตรฐานและหยุดคำ
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stopwords = Thinker . processors . stopwords ( {
"artikel" : true ,
"bemötande" : true
} ) ;
thinker . addWordProcessor ( stopwords ) ;
thinker . ranker = ranker ;ค้นหาต้นกำเนิดของแต่ละคำที่ได้รับการจัดทำดัชนี 'คอมพิวเตอร์' จะกลายเป็น 'คอมพิวเตอร์', 'จัดระเบียบ' จะกลายเป็น 'จัดระเบียบ' ฯลฯ สิ่งนี้จะช่วยเพิ่มความแม่นยำของการแข่งขันและการถ่วงน้ำหนัก
คุณสมบัติเสริมของ Stemmers คือการจัดหารายการคำที่คุณไม่ต้องการหยุดยั้ง
ขณะนี้มีสเตมเมอร์สองตัวสวีเดนผ่านอัลกอริทึมสโนว์บอลรุ่นที่กำหนดเองและภาษาอังกฤษผ่านอัลกอริทึม Porter
ตัวอย่างการตั้งค่านักคิดที่มีมาตรฐานการจัดอันดับภาษาอังกฤษที่เกิดขึ้นและคำหยุด 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 ;ตัวอย่างการตั้งค่านักคิดที่มี Ranker Standard, Swedish Stemming และ Stemmer Stop Words
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
ได้รับใบอนุญาตภายใต้ใบอนุญาต MIT