محرك بحث قائم على Tantivy لـ 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 هو مخطط الفهرس ، الذي يتم التعبير عنه ككائن قابل للتطبيق JSON بعد تعريف مخطط Tantivy. الوثائق ليست مركزية أجهزة الصراف الآلي ، انظر المثال أعلاه.
const index = await catalog.create(indexName, schema, opts) إنشاء فهرس. سيتم رميه إذا كان هناك فهرس بواسطة هذا indexName موجود بالفعل. opts هي:
ram : إذا كان صحيحًا قم بإنشاء فهرس في الذاكرة 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 هي مجموعة من أسماء الفهرس.
لتوسيع
الجزء الصدأ هو غلاف حول tantivy. يجمع إلى ثنائي. يتم استدعاء الثنائي مع مسار التخزين كحجة فقط. يستمع لرسائل JSON التي تحددها خط جديد على stdin ، والردود على نفس التنسيق.
يولد جزء العقدة الثنائي الصدأ ويتواصل على أنبوب stdio. ويضيف واجهة برمجة تطبيقات عالية المستوى حول آلية RPC البسيطة هذه.
ستحاول خطوة postinstall NPM تنزيل ثنائي مسبق للجزء الصدأ من إصدارات GitHub. يتم تجميع الثنائيات ونشرها عبر ترافيس. إذا لم تتمكن من العثور على ثنائي مطابق ، فسيحاول التجميع إذا كان مخطط أدوات الصدأ متاحًا. في حالة وجود متغير البيئة RUST_ENV=development ، سيتم استدعاء cargo run (بدون --release ) بدلاً من ذلك.