「今までにまともなルーセンのようなクライアント側(ブラウザ内)の検索エンジンを持っていないのはなぜですか?」
このライブラリは、ブラウザと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