เครื่องมือค้นหาที่ใช้ 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 พยายามดาวน์โหลดไบนารีที่รวบรวมไว้ล่วงหน้าสำหรับส่วนที่เป็นสนิม/tantivy โดยอัตโนมัติ หากไม่ประสบความสำเร็จสคริปต์จะพยายามรวบรวมหากมีการเกิดสนิมเครื่องมือ
const IndexCatalog = require ( '@arso-project/sonar-tantivy' ) const catalog = new IndexCatalog(storage) storage เป็นพา ธ ระบบไฟล์ที่จะจัดเก็บดัชนี
const index = await catalog.openOrCreate(indexName, schema) indexName เป็นสตริงเพื่อระบุดัชนี ควรมีอักขระที่ใช้ได้ในพา ธ ของระบบไฟล์เท่านั้น schema เป็นสคีมาดัชนีซึ่งแสดงเป็นวัตถุ JSON-serializable ตามคำจำกัดความสคีมาของ Tantivy เอกสารไม่ได้เป็นศูนย์กลาง ATM ดูตัวอย่างด้านบน
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 สำหรับรายละเอียดเกี่ยวกับไวยากรณ์ที่รองรับ limit คือจำนวนเอกสารสูงสุดที่จะส่งคืน (ค่าเริ่มต้น 10) snippetField เป็นชื่อของฟิลด์ที่จะส่งคืนตัวอย่างผลลัพธ์ด้วยคำหลักที่ไฮไลต์ (เป็น HTML พร้อมแท็ก <b> )
const results = await catalog.multiQuery(query, indexes) สอบถามดัชนีทั้งหมดในแคตตาล็อก indexes เป็นอาร์เรย์ของชื่อดัชนี
ที่จะขยาย
ส่วนที่เป็นสนิมเป็นเสื้อคลุมรอบ ๆ Tantivy มันรวบรวมเป็นไบนารี ไบนารีถูกเรียกใช้ด้วยเส้นทางการจัดเก็บเป็นอาร์กิวเมนต์เท่านั้น มันรับฟังข้อความ JSON ที่กำหนดใหม่บน stdin และตอบกลับในรูปแบบเดียวกัน
ส่วนโหนดวางไข่ไบนารีสนิมและสื่อสารผ่านท่อ stdio มันเพิ่ม API ระดับสูงขึ้นรอบ ๆ กลไก RPC ที่เรียบง่ายนี้
ขั้นตอนการติดตั้ง NPM postinstall จะพยายามดาวน์โหลดไบนารีที่รวบรวมไว้ล่วงหน้าของชิ้นส่วนสนิมจาก GitHub ปล่อย ไบนารีถูกรวบรวมและนำไปใช้ผ่านเทรวิส หากไม่พบไบนารีที่ตรงกันมันจะพยายามรวบรวมหากมีเชนที่เป็นสนิม หากตัวแปรสภาพแวดล้อม RUST_ENV=development มีอยู่ cargo run (โดยไม่ต้อง --release ) จะถูกเรียกใช้แทน