
Mesin pencari teks lengkap yang cepat, mudah diperpanjang dan berdiri sendiri murni. Node. Deno. Browser.
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 ( ) ;Naskah
Perhatikan bahwa hanya ekspor default yang tersedia dalam node node.js, karena modul CommonJS digunakan secara internal.
import Thinker from "thinker-fts" ;
const thinker = Thinker ( ) ;Javascript
import Thinker from "https://cdn.jsdelivr.net/gh/hexagon/thinker-fts@2/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;atau
import Thinker from "https://deno.land/x/thinker/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;thinker.min.js (UMD dan mandiri) atau thinker.min.mjs (ES-module) dari folder Dist/ Untuk digunakan sebagai modul UMD (berdiri sendiri, persyaratan dll.)
< script src =" https://cdn.jsdelivr.net/npm/thinker-fts/dist/thinker.min.js " > </ script >Untuk digunakan sebagai modul 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 > Pengaturan sederhana dengan memberi makan dan pencarian akan terlihat seperti cuplikan di bawah ini
// 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 ) ;Hasil:
{
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
}
Harap tidak Anda harus menghubungkan Ranker, kalau tidak, Find tidak akan memberikan set hasil. Ranker membangun set hasil.
Konfigurasi default pemikir diganti dengan memasok objek opsi untuk konstruktor pemikir.
// 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
} ) ;Mengekspresikan reguler yang menyatakan karakter mana yang akan diambil sebagai kata -kata, jika Anda (sebagai contoh) ingin menggunakan pemikir dengan karakter Swedia pengaturannya
{ characters : / ([a-zA-Z0-9åäöÅÄÖ]*) / g }Penjelasan diri, benar atau salah
Pemikir selalu melakukan pencocokan parsial, MinwildCardwordlen menetapkan bagaimana bagian pendek dari kata -kata yang harus diindeks. Pengaturan default adalah 4 yang cocok dengan 'xpre' dengan 'ekspresi', tetapi tidak 'pre'. Mengatur ini terlalu pendek bisa memberikan jumlah kecocokan palsu dan dapat mempengaruhi kinerja jika digunakan dengan ranker berat.
Sama seperti di atas, tetapi maks.
Kata terpendek ke indeks, default adalah 2 yang menambahkan 'ex' ke indeks, tetapi tidak 'e'
Sama seperti di atas, tetapi maks.
Tetapkan berapa kali suatu kata harus ada dalam indeks untuk digunakan untuk saran. Default ke 6.
Jika ini diaktifkan, pemikir akan menggunakan kata -kata yang tidak diproses dari teks yang dimasukkan untuk memberikan saran ketika ekspresi tidak memberikan kecocokan langsung.
Inilah hasil yang dihasilkan.
Akan diganti namanya, saya janji.
Ini adalah berapa banyak kata yang harus ada dalam ekspresi sebelum semua kata menjadi opsional. Default ke 1 (dinonaktifkan).
Jika Anda mengatur ini ke 4, dan mencari ekspresi tiga kata, semua kata harus ada dalam dokumen untuk cocok dengan cocok. Di latar belakang what you want +what +you +want . Jika Anda memberikan ekspresi empat kata, semua kata menjadi opsional sebagai USUABL.
Ketika properti ini diatur ke lebih dari satu, kata -kata augmented akan dimasukkan ke dalam indeks, yang terdiri dari kata saat ini dan berikutnya. Jika properti ini diatur ke 3 dan lapangan adalah "Saya ingin cookie hari ini", pencarian untuk iwantcookies , wantcookiestoday atau wantcookies akan cocok.
{
interpretation : {
original : 'expression' ,
...
} ,
...
suggestion : 'expression' ,
...
} Ranker dikonfigurasi dengan meneruskan objek opsi ke konstruktornya.
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 ;Faktor berat saat ekspresi cocok dengan kata secara langsung resp. sebagian
Faktor yang diterapkan pada bobot total dokumen ketika sebuah ekspresi memberikan kecocokan parsial. Jika kueri terdiri dari tiga ekspresi yang semuanya cocok sebagian faktor ini akan diterapkan tiga kali.
Sama seperti di atas, tetapi dengan hit langsung.
Objek yang mendefinisikan bobot dasar yang berbeda untuk kecocokan di setiap bidang dokumen, jika dokumen Anda terlihat seperti
var docs = [
{ id : 1 , fields : [ "This is the title" , "This is the ingress" , "This is the text" ] } ,
...
] ;dan bobot bidang Anda terlihat seperti
fields: {
0 : { weight : 4 , boostPercentage : true } ,
1 : { weight : 2 , boostPercentage : false } ,
2 : { weight : 2 , boostPercentage : false }
}Pertandingan di bidang judul akan mendapatkan bobot empat, pertandingan di bidang Ingress akan mendapatkan bobot dua dll.
Selain itu, karena BoostPercentage diatur ke True untuk judul, berat itu bisa naik ke dua kali lipat jika pertandingan adalah satu -satunya kata dalam judul.
Misalnya, jika judulnya adalah 'ini adalah barang', dan kami mencari 'barang', berat dasarnya adalah empat, dan itu dikalikan dengan faktor yang dihitung
1 kata cocok, 4 kata benar -benar
1+1/4
1+0,25
memberikan 1,25 dalam faktor boostpercentage
Prosesor lapangan adalah fungsi yang diterapkan untuk setiap bidang yang dimasukkan oleh pemikir, sebelum pengindeksan selesai.
Striptik html, meninggalkan tautan (href = " ") dan deskripsi gambar (img alt = " ") dalam hasil yang dikembalikan.
Contoh Menyiapkan Pemikir dengan Ranker Standar dan HTML-stripping
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stripHtml = Thinker . processors . stripHtml ( ) ;
thinker . addFieldProcessor ( stripHtml ) ;
thinker . ranker = ranker ; Pengolah kata adalah fungsi yang diterapkan pada setiap kata yang dimasukkan oleh pemikir. Mereka diterapkan dengan cara yang sama baik saat pengindeksan dan saat meminta.
Pengolah kata ditangani dengan cara yang sama mereka dikonfigurasi, ingatlah ketika mengatur sesuatu. Jika Anda misalnya membendung kata sebelum menerapkan WordForms, Anda perlu menggunakan kata -kata berasal dari daftar WordForms.
Menggantikan kata -kata yang dipilih dengan orang lain, secara efektif membuat sinonim sama dengan satu sama lain.
Contoh Menyiapkan Pemikir dengan Ranker dan WordForms Standar
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
wordforms = Thinker . processors . wordforms ( {
"we" : "us" ,
"they" : "them" ,
"github" : "repository"
} ) ;
thinker . addWordProcessor ( wordforms ) ;
thinker . ranker = ranker ;Menghapus kata -kata yang tidak memberikan ketepatan yang lebih baik, biasanya hal -hal seperti 'dan', 'i', 'mereka', 'kita', 'bisa'. Menambahkan kata -kata yang paling umum di sini dapat sedikit mempercepat Qures, dan menyimpan beberapa RAM.
Contoh Menyiapkan Pemikir dengan Ranker Standar dan Hentikan Kata -kata
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stopwords = Thinker . processors . stopwords ( {
"artikel" : true ,
"bemötande" : true
} ) ;
thinker . addWordProcessor ( stopwords ) ;
thinker . ranker = ranker ;Menemukan batang dari setiap kata yang diindeks, 'komputer' akan menjadi 'komputer', 'terorganisir' akan menjadi 'mengatur' dll. Ini sangat meningkatkan akurasi kecocokan dan pembobotan.
Fitur opsional dari Stemmers adalah menyediakan daftar kata yang tidak ingin Anda bintangi.
Saat ini ada dua stemmers yang tersedia, Swedia melalui versi khusus algoritma Snowball, dan bahasa Inggris melalui algoritma Porter.
Contoh Menyiapkan Pemikir dengan Ranker Standar, Bahasa Inggris Stemming dan beberapa Stemmer Stopwords.
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 ;Contoh Menyiapkan Pemikir dengan Ranker Standar, Stemming Swedia, dan 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 preprocess kata -kata sedemikian rupa sehingga kata -kata yang terdengar sama cocok satu sama lain.
Contoh pengaturan pemikir dengan pemrosesan soundex.
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
soundex = Thinker . processors . soundex ( ) ;
thinker . addWordProcessor ( soundex ) ;
thinker . ranker = ranker ; Catatan: Untuk penggunaan normal, semua dependensi yang dibutuhkan dibundel
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)
harus (https://github.com/shouldjs/should.js)
Segi enam
Pehr Boman
Berlisensi di bawah lisensi MIT