node.jsのタンティビーベースの検索エンジン
const IndexCatalog = require ( '@arso-project/sonar-tantivy' )
( async function ( ) {
const catalog = new IndexCatalog ( './data' )
const schema = getSchema ( )
const index = await catalog . openOrCreate ( 'index-name' , schema )
const docs = getDocs ( )
await index . add ( docs )
const results = await index . query ( 'world' )
console . log ( 'query results' , results )
} ) ( )
function getDocs ( ) {
return [
{ id : '0' , title : 'Hello world!' , body : 'tell me more' } ,
{ id : '1' , title : 'Ola mundo!' , body : 'que pasa pues' }
]
}
function getSchema ( ) {
return [
{
name : 'title' ,
type : 'text' ,
options : {
indexing : { record : 'position' , tokenizer : 'en_stem' } ,
stored : true
}
} ,
{
name : 'body' ,
type : 'text' ,
options : {
indexing : { record : 'position' , tokenizer : 'en_stem' } ,
stored : true
}
} ,
{
name : 'id' ,
type : 'text' ,
options : { indexing : null , stored : true }
} ,
]
} npm install @arso-project/sonar-tantivy postinstallスクリプトは、Rust/Tantivy部品のプリコンパイルされたバイナリを自動的にダウンロードしようとします。失敗した場合、スクリプトは錆ツールチェーンが存在する場合にコンパイルしようとします。
const IndexCatalog = require ( '@arso-project/sonar-tantivy' ) const catalog = new IndexCatalog(storage) storageは、インデックスが保存されるファイルシステムパスです。
const index = await catalog.openOrCreate(indexName, schema) indexName 、インデックスを識別する文字列です。ファイルシステムパスで有効な文字のみを含める必要があります。 schemaインデックススキーマであり、Tantivy Schemaの定義に従ってJSONセライアル化可能なオブジェクトとして表されます。ドキュメントは集中型ATMではありません。上記の例を参照してください。
const index = await catalog.create(indexName, schema, opts)インデックスを作成します。このindexNameのインデックスがすでに存在する場合、スローします。 opts次のとおりです。
ram :trueの場合、メモリ内インデックスを作成しますawait index.add(docs) docs 、インデックススキーマと同じ構造を持つドキュメントの配列です。
const results = await index.query(query, [limit], [snippetField])インデックスを照会します。現時点では、文字列クエリのみがサポートされています。サポートされている文法の詳細については、Tantivy Docsを参照してください。 limitは、返信するドキュメントの最大数です(デフォルト10)。 snippetField 、ハイライトされたキーワードを使用して結果のスニペットを返すフィールドの名前です(html、 <b>タグ付き)
const results = await catalog.multiQuery(query, indexes)カタログ内のすべてのインデックスをクエリします。 indexes 、インデックス名の配列です。
拡大する
錆の部分は、タンティビーの周りのラッパーです。バイナリにコンパイルします。バイナリは、引数のみとしてストレージパスで呼び出されます。 StdinでNewline Delimited JSONメッセージを聴き、同じ形式で返信します。
ノード部分はRustバイナリを生成し、Stdioパイプを介して通信します。この単純なRPCメカニズムに高レベルのAPIを追加します。
NPM postinstallステップでは、GitHubリリースからRust部品のプリコンパイルされたバイナリをダウンロードしようとします。バイナリは編集され、Travisを介して展開されます。一致するバイナリが見つからない場合は、錆ツールチェーンが利用可能である場合にコンパイルしようとします。環境変数RUST_ENV=developmentが存在する場合、代わりにcargo run ( --releaseなし)が呼び出されます。