Um mecanismo de pesquisa baseado em 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 Um script postinstall tenta automaticamente baixar um binário pré -compilado para a parte da ferrugem/Tantivy. Se sem sucesso, o script tentará compilá -lo se uma cadeia de ferramentas de ferrugem estiver presente.
const IndexCatalog = require ( '@arso-project/sonar-tantivy' ) const catalog = new IndexCatalog(storage) storage é um caminho do sistema de arquivos em que o índice será armazenado.
const index = await catalog.openOrCreate(indexName, schema) indexName é uma string para identificar o índice. Ele deve conter apenas caracteres válidos nos caminhos do sistema de arquivos. schema é o esquema de índice, expresso como um objeto JSON-Serializable seguindo a definição do esquema Tantivy. A documentação não é um caixa eletrônico centralizado, veja o exemplo acima.
const index = await catalog.create(indexName, schema, opts) Criar um índice. Vai lançar se já existir um índice por esse indexName . opts são:
ram : Se TRUE Crie um índice na memória await index.add(docs) docs é uma variedade de documentos com a mesma estrutura que o esquema de índice.
const results = await index.query(query, [limit], [snippetField]) Consulte o índice. No momento, apenas as consultas de string são suportadas, consulte Tantivy Docs para obter detalhes sobre a gramática suportada. limit é o número máximo de documentos a serem retornados (padrão 10). snippetField é o nome de um campo para o qual retornar um trecho de resultado com palavras -chave destacadas (como html, com tags <b> )
const results = await catalog.multiQuery(query, indexes) Consulte todos os índices no catálogo. indexes é uma matriz de nomes de índices.
Para ser expandido
A parte da ferrugem é um invólucro em torno de Tantivy. Ele compila a um binário. O binário é invocado com um caminho de armazenamento como apenas argumento. Ele ouve as mensagens JSON delimitadas pela NewLine no stdin e responde no mesmo formato.
A parte do nó gera o binário da ferrugem e se comunica sobre o tubo de stdio. Ele adiciona uma API de nível superior em torno desse mecanismo RPC simples.
Uma etapa postinstall NPM tentará baixar um binário pré -compilado da parte da ferrugem dos lançamentos do GitHub. Os binários são compilados e implantados via Travis. Se não conseguir encontrar um binário correspondente, tentará compilar se uma cadeia de ferramentas de ferrugem estiver disponível. Se a variável de ambiente RUST_ENV=development estiver presente, cargo run (sem --release ) será invocada.