Instalasi | Ikhtisar | Tokenisasi | Berasal | Hentikan Kata | Indeks Pencarian | Strategi Indeks
Js Search memungkinkan pencarian objek JavaScript dan JSON di sisi klien secara efisien. Ini kompatibel dengan ES5 dan tidak memerlukan jQuery atau perpustakaan pihak ketiga lainnya.
Js Search dimulai sebagai implementasi ringan dari Lunr JS, menawarkan peningkatan kinerja runtime dan ukuran file yang lebih kecil. Sejak itu telah diperluas untuk mencakup serangkaian fitur yang kaya yang mendukung stemming, stop-words, dan peringkat TF-IDF.
Berikut adalah beberapa tolok ukur JS Perf yang membandingkan kedua perpustakaan pencarian. (Terima kasih kepada olivernn karena telah mengubah sisi Lunr untuk perbandingan yang lebih baik!)
Jika Anda mencari utilitas pencarian JS yang lebih sederhana dan dioptimalkan untuk pekerja web, lihat js-worker-search.
Anda dapat menginstal menggunakan Bower atau NPM seperti:
npm install js-search
bower install js-search
Pada tingkat tinggi Anda mengonfigurasi Js Search dengan memberi tahu bidang mana yang harus diindeks untuk pencarian dan kemudian menambahkan objek yang akan dicari.
Misalnya, penggunaan JS Search yang sederhana adalah sebagai berikut:
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]
Tokenisasi adalah proses memecah teks (misalnya kalimat) menjadi token yang lebih kecil dan dapat dicari (misalnya kata atau bagian kata). Js Search menyediakan tokenizer dasar yang seharusnya berfungsi dengan baik untuk bahasa Inggris tetapi Anda dapat menyediakannya sendiri seperti:
search . tokenizer = {
tokenize ( text /* string */ ) {
// Convert text to an Array of strings and return the Array
}
} ;
Stemming adalah proses mereduksi token pencarian ke akarnya (atau "stem") sehingga pencarian berbagai bentuk kata tetap membuahkan hasil. Misalnya "pencarian", "pencarian" dan "pencarian" semuanya dapat direduksi menjadi kata dasar "pencarian".
Js Search tidak mengimplementasikan pustaka stemmingnya sendiri namun mendukung stemming melalui penggunaan pustaka pihak ketiga.
Untuk mengaktifkan stemming, gunakan StemmingTokenizer
seperti:
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 ( ) ) ;
Kata-kata berhenti sangat umum (misalnya a, an, dan, the, of) dan seringkali tidak bermakna secara semantik. Secara default Js Search tidak memfilter kata-kata ini, namun pemfilteran dapat diaktifkan dengan menggunakan StopWordsTokenizer
seperti:
search . tokenizer =
new JsSearch . StopWordsTokenizer (
new JsSearch . SimpleTokenizer ( ) ) ;
Secara default Js Search menggunakan versi sedikit modifikasi dari kata-kata berhenti Riwayat Google yang terdaftar di www.ranks.nl/stopwords. Anda dapat mengubah daftar kata-kata berhenti ini dengan menambahkan atau menghapus nilai dari objek JsSearch.StopWordsMap
seperti:
JsSearch . StopWordsMap . the = false ; // Do not treat "the" as a stop word
JsSearch . StopWordsMap . bob = true ; // Treat "bob" as a stop word
Perhatikan bahwa kata-kata berhenti menggunakan huruf kecil sehingga menggunakan pembersih peka huruf besar-kecil dapat mencegah beberapa kata-kata berhenti dihapus.
Ada dua indeks pencarian yang dikemas dengan js-search
.
Frekuensi istilah – frekuensi dokumen terbalik (atau TF-IDF) adalah statistik numerik yang dimaksudkan untuk mencerminkan betapa pentingnya sebuah kata (atau kata-kata) bagi dokumen dalam korpus. Nilai TF-IDF meningkat secara proporsional dengan berapa kali sebuah kata muncul dalam dokumen namun diimbangi dengan frekuensi kata dalam korpus. Hal ini membantu menyesuaikan fakta bahwa beberapa kata (misalnya dan, atau, itu) muncul lebih sering dibandingkan kata lain.
Secara default Js Search mendukung peringkat TF-IDF tetapi ini dapat dinonaktifkan karena alasan kinerja jika tidak diperlukan. Anda dapat menentukan implementasi ISearchIndex
alternatif untuk menonaktifkan TF-IDF, seperti:
// 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 ( ) ;
Ada tiga strategi indeks yang dikemas dengan js-search
.
Indeks PrefixIndexStrategy
untuk pencarian awalan. (misalnya istilah "cat" diindeks sebagai "c", "ca", dan "cat" memungkinkan pencarian pencarian awalan).
Indeks AllSubstringsIndexStrategy
untuk semua substring. Dengan kata lain "c", "ca", "cat", "a", "at", dan "t" semuanya cocok dengan "cat".
Indeks ExactWordIndexStrategy
untuk pencocokan kata yang tepat. Misalnya "bob" akan cocok dengan "bob jones" (tetapi "bo" tidak akan cocok).
Secara default Js Search mendukung pengindeksan awalan tetapi ini dapat dikonfigurasi. Anda dapat menentukan implementasi IIndexStrategy
alternatif untuk menonaktifkan pengindeksan awalan, seperti:
// 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 ( ) ;