"지금까지 우리는 왜 괜찮은 루센과 같은 클라이언트 측 (브라우저) 검색 엔진을 가지고 있지 않습니까?"
이 라이브러리는 브라우저 및 Node.js에 대한 Lucene과 같은 전체 텍스트 검색 기능을 제공합니다.
이 검색 엔진은 여러 고급 알고리즘을 사용하여 대규모 문서 모음을 강력하고 효율적으로 검색합니다. 사용 된 알고리즘에는 계량 및 순위를위한 TF-IDF, 퍼지 매칭을위한 BK-Tree, 관련성 스코어링을위한 BM25 및 검색어 간의 편집 거리를 측정하기위한 Damerau-Levenshtein 거리가 포함됩니다. 검색 엔진은 여러 언어를 지원하며 스템 밍 및 스톱워드 제거를 사용하여 효율성을 향상시킵니다. 또한 문서와 관련된 메타 데이터의 저장 및 검색을 지원합니다. 클라이언트 및 서버 측에서 텍스트 코퍼스 및 메타 데이터에서 색인을 생성 할 수 있습니다. 클라이언트 및 서버 측 모두에서 인덱스를 수화 및 재활용 (사전 생성 된 재사용) 할 수 있습니다.
TF-IDF 벡터화, BM25 및 Bktree 순위를 사용하는 Lucene과 같은 인덱스를 사용하고 클라이언트 측의 스코틀랜드 스템 스템을 사용하고 싶습니다.
클라이언트 측 또는 서버 측에서 검색 인덱스를 생성하고자합니다 (클라이언트 또는 서버 측에서 다시 사용/재사용). 상태 정보는 작고 압축해야합니다.
전체 텍스트 검색은 빠르고 효율적이어야하며, 많은 잘못된 양성 또는 거짓 음성으로 이어지지 않습니다.
검색 엔진은 각 문서와 연관 될 수있는 메타 데이터에서 리피를하고 검색 할 수 있어야합니다.
검색 엔진은 인덱스 문서를 제거/업데이트 할 수 있어야합니다.
상태는 수화 가능해야합니다.
en , de , fr , es , ja8 KiB Nano 크기 (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