"Mengapa kita tidak memiliki mesin pencari sisi klien (in-browser) yang layak, sekarang?"
Perpustakaan ini menyediakan fitur pencarian teks lengkap seperti Lucene untuk browser dan node.js.
Mesin pencari ini menggunakan beberapa algoritma canggih untuk memberikan pencarian yang kuat dan efisien atas banyak dokumen. Algoritma yang digunakan termasuk TF-IDF untuk penimbangan dan peringkat, BK-Tree untuk pencocokan fuzzy, BM25 untuk penilaian relevansi, dan jarak Damerau-Levenshtein untuk mengukur jarak edit antara istilah pencarian. Mesin pencari mendukung berbagai bahasa dan menggunakan penghapusan stemming dan stopword untuk meningkatkan efisiensinya. Ini juga mendukung penyimpanan dan pengambilan metadata yang terkait dengan dokumen. Anda dapat menghasilkan indeks dari corpus teks dan metadata baik di sisi klien dan server. Anda dapat melembabkan dan menghidrat kembali (menggunakan kembali indeks yang dihasilkan sebelumnya) juga pada sisi klien dan server.
Saya ingin menggunakan indeks seperti Lucene yang menggunakan vektorisasi TF-IDF, peringkat BM25 dan BKTREE serta bola salju yang dibawa oleh dan stopword di sisi klien.
Saya ingin menghasilkan indeks pencarian baik di sisi klien atau sisi server (dan menghidrasi kembali/menggunakannya kembali pada klien atau sisi server). Informasi negara harus kecil dan terkompresi.
Pencarian teks lengkap harus cepat dan efisien, tidak mengarah ke banyak positive palsu atau negatif palsu.
Mesin pencari harus dapat mengambil kembali dan mencari di metadata yang mungkin terkait dengan setiap dokumen.
Mesin pencari harus dapat menghapus/memperbarui dokumen indeksnya.
Negara harus terhidratable.
en , de , fr , es , ja8 KiB nano sized (ESM, gizpped, base library)yarn add clientside-searchnpm install clientside-search import { SearchEngine } from 'clientside-search'
import en from 'clientside-search/en'
// create a new instance of a search engine
const searchEngine = new SearchEngine ( en )
// add some text
const docId1 = searchEngine . addDocument ( 'The quick brown fox jumps over the lazy dog' )
// you can also add UTF8 text, and metadata
const docId2 = searchEngine . addDocument ( 'The quick brown fox jumps over the fence ✅' , {
// metadata with index_ prefix will be indexed for search
index_title : 'Fence' ,
date : new Date ( ) ,
author : 'John Doe' ,
} )
/**
* {
* id:
* score: 1.34,
* metadata: { title: 'Fence', date: '2023-07-12 ...', author: 'John Doe' }
* }
*/
const searchResult = searchEngine . search ( 'Fence' )
// if you want to persist the index state,
// hydratedState is a JSON string that you can persist
const hydratedState = searchEngine . hydrateState ( )
// PLEASE NOTE: The hydrated state does NOT contain the original input text
// It contains an optimized representation of the search index
// However, metadata is kept 1:1
// you can re-hydrate from that state anywhere,
// on the server or the client:
const hydratedEngine = SearchEngine . fromHydratedState ( hydratedState , en )
// equals: searchResult
const searchResultFromHydated = hydratedEngine . search ( 'Fence' ) const { SearchEngine } = require ( 'clientside-search' )
const { en } = require ( 'clientside-search/en' )
// same API like ESM variant