Mesin pencari berbasis yang menggoda untuk 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 Script postinstall secara otomatis mencoba mengunduh biner yang sudah dikompilasi untuk bagian karat/tantivy. Jika tidak berhasil, skrip akan mencoba mengkompilasinya jika ada alat karat.
const IndexCatalog = require ( '@arso-project/sonar-tantivy' ) const catalog = new IndexCatalog(storage) storage adalah jalur sistem file di mana indeks akan disimpan.
const index = await catalog.openOrCreate(indexName, schema) indexName adalah string untuk mengidentifikasi indeks. Ini seharusnya hanya berisi karakter yang valid dalam jalur sistem file. schema adalah skema indeks, dinyatakan sebagai objek JSON-serializable mengikuti definisi skema tantivy. Dokumentasi bukanlah ATM terpusat, lihat contoh di atas.
const index = await catalog.create(indexName, schema, opts) Buat indeks. Akan melempar jika indeks oleh indexName ini sudah ada. opts adalah:
ram : Jika benar buat indeks dalam memori await index.add(docs) docs adalah serangkaian dokumen dengan struktur yang sama dengan skema indeks.
const results = await index.query(query, [limit], [snippetField]) Meminta indeks. Saat ini hanya kueri string yang didukung, lihat dokumen yang tantivy untuk detail tentang tata bahasa yang didukung. limit adalah jumlah maksimum dokumen untuk dikembalikan (default 10). snippetField adalah nama bidang untuk mengembalikan snippet hasil dengan kata kunci yang disorot (sebagai html, dengan tag <b> )
const results = await catalog.multiQuery(query, indexes) Permintaan semua indeks dalam katalog. indexes adalah array nama indeks.
Untuk diperluas
Bagian karat adalah pembungkus di sekitar tanttivy. Ini dikompilasi ke biner. Biner dipanggil dengan jalur penyimpanan sebagai hanya argumen. Ini mendengarkan pesan JSON yang dibatasi baru di Stdin, dan balasan dalam format yang sama.
Bagian simpul memunculkan biner karat dan berkomunikasi di atas pipa stdio. Ini menambahkan API tingkat yang lebih tinggi di sekitar mekanisme RPC sederhana ini.
Langkah postinstall NPM akan mencoba mengunduh biner yang dikompilasi dari bagian karat dari rilis GitHub. Binari disusun dan digunakan melalui Travis. Jika tidak dapat menemukan biner yang cocok, itu akan mencoba untuk mengkompilasi jika rust toolchain tersedia. Jika variabel lingkungan RUST_ENV=development hadir, cargo run (tanpa --release ) akan dipanggil sebagai gantinya.