Un motor de búsqueda basado en tantivy para 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 Un script postinstall intenta descargar automáticamente un binario precompilado para la parte Rust/Tantivy. Si no tiene éxito, el script intentará compilarlo si hay una cadena de herramientas de óxido.
const IndexCatalog = require ( '@arso-project/sonar-tantivy' ) const catalog = new IndexCatalog(storage) storage es una ruta del sistema de archivos donde se almacenará el índice.
const index = await catalog.openOrCreate(indexName, schema) indexName es una cadena para identificar el índice. Solo debe contener caracteres válidos en las rutas del sistema de archivos. schema es el esquema de índice, expresado como un objeto JSON-serializable siguiendo la definición de esquema tantivy. La documentación no es centralizada ATM, vea el ejemplo anterior.
const index = await catalog.create(indexName, schema, opts) Crear un índice. Lanzará si ya existe un índice de este indexName . opts son:
ram : Si es verdadero, cree un índice en memoria await index.add(docs) docs es una variedad de documentos con la misma estructura que el esquema de índice.
const results = await index.query(query, [limit], [snippetField]) Consulta el índice. En este momento solo se admiten consultas de cadena, consulte Tantivy Docs para obtener detalles sobre la gramática compatible. limit es el número máximo de documentos para devolver (predeterminado 10). snippetField es el nombre de un campo para el cual devolver un fragmento de resultados con palabras clave resaltadas (como html, con <b> etiquetas)
const results = await catalog.multiQuery(query, indexes) Consulta todos los índices en el catálogo. indexes son una matriz de nombres de índices.
Para expandir
La parte de óxido es un envoltorio alrededor de Tantivy. Se compila a un binario. El binario se invoca con una ruta de almacenamiento como solo argumento. Escucha los mensajes JSON delimitados NewLine en Stdin, y responde en el mismo formato.
La parte del nodo genera el binario de óxido y se comunica sobre la tubería Stdio. Agrega una API de nivel superior alrededor de este mecanismo RPC simple.
Un paso postinstall NPM intentará descargar un binario precompilado de la parte de óxido de los lanzamientos de GitHub. Los binarios se compilan y se implementan a través de Travis. Si no puede encontrar un binario coincidente, intentará compilar si hay una cadena de herramientas de óxido disponible. Si la variable de entorno RUST_ENV=development está presente, cargo run (sin --release ) se invocará en su lugar.