Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

173
Visualizações
Problema de índice de documentos de exportación e importación de Flexsearch

Estoy tratando de crear un índice sobre el uso de flexsearch y nodejs y almacenarlo en un disco local, ya que lleva bastante tiempo construirlo. La exportación parece funcionar, pero cuando intento importar el archivo nuevamente con un nuevo índice de documentos, aparece este error:

 TypeError: Cannot read property 'import' of undefined at Qtimport (/opt/hermetic/hermetic/server/node_modules/flexsearch/dist/flexsearch.bundle.js:33:330) at Object.retrieveIndex (/opt/hermetic/hermetic/server/build/search.js:86:25) at Object.search (/opt/hermetic/hermetic/server/build/search.js:96:32) at init (/opt/hermetic/hermetic/server/build/server.js:270:27)

Estoy ejecutando la versión 14 de nodejs y la versión 0.7.21 de flexsearch. A continuación se muestra el código que estoy usando:

 import fs from 'fs'; import Flexsearch from 'flexsearch'; const createIndex = async () => { const { Document } = Flexsearch; const index = new Document({ document: { id: 'id', tag: 'tag', store: true, index: [ 'record:a', 'record:b', 'tag', ], }, }); index.add({ id: 0, tag: 'category1', record: { a: '1 aaa', b: '0 bbb' } }); index.add({ id: 1, tag: 'category1', record: { a: '1 aaa', b: '1 bbb' } }); index.add({ id: 2, tag: 'category2', record: { a: '2 aaa', b: '2 bbb' } }); index.add({ id: 3, tag: 'category2', record: { a: '2 aaa', b: '3 bbb' } }); console.log('search', index.search('aaa')); await index.export((key, data) => fs.writeFile(`./search_index/${key}`, data, err => !!err && console.log(err))); return true; } const retrieveIndex = async () => { const { Document } = Flexsearch; const index = new Document({ document: { id: 'id', tag: 'tag', store: true, index: [ 'record:a', 'record:b', 'tag', ], }, }); const keys = fs .readdirSync('./search_index', { withFileTypes: true }, err => !!err && console.log(err)) .filter(item => !item.isDirectory()) .map(item => item.name); for (let i = 0, key; i < keys.length; i += 1) { key = keys[i]; const data = fs.readFileSync(`./search_index/${key}`, 'utf8'); index.import(key, data); } return index; } await createIndex(); const index = await retrieveIndex(); console.log('cached search', index.search('aaa'));
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Después de investigar esto más a fondo, la función no está disponible actualmente para búsquedas de tipo de documento. Consulte este problema en github para obtener más información.

about 4 years ago · Juan Pablo Isaza Relatório

0

También estaba tratando de encontrar una manera de exportar el índice correctamente, originalmente tratando de poner todo en un solo archivo. Si bien funcionó, no me gustó mucho la solución .

Lo que me llevó a su pregunta SO, revisé su código y logré averiguar por qué recibe ese error.

Básicamente, la exportación es una operación de sincronización, mientras que también (aleatoriamente) usa async. Para evitar el problema, debe eliminar todo el código asíncrono y solo usar operaciones de sincronización node.fs Para mi solución, también creé solo una vez el almacén de Documentos, para luego simplemente llenarlo a través de retrieveIndex() en lugar de crear new Document() por función.

También agregué una extensión .json para garantizar que node.fs lea el archivo correctamente y por motivos de cordura; después de todo, está almacenado en json.

Así que gracias por darme la idea de almacenar cada key como archivo @Jamie Nicholls 🤝

 import fs from 'fs'; import { Document } from 'flexsearch' const searchIndexPath = '/Users/user/Documents/linked/search-index/' let index = new Document({ document: { id: 'date', index: ['content'] }, tokenize: 'forward' }) const createIndex = () => { index.add({ date: "2021-11-01", content: 'asdf asdf asd asd asd asd' }) index.add({ date: "2021-11-02", content: 'fobar 334kkk' }) index.add({ date: "2021-11-04", content: 'fobar 234 sffgfd' }) index.export( (key, data) => fs.writeFileSync(`${searchIndexPath}${key}.json`, data !== undefined ? data : '') ) } createIndex() const retrieveIndex = () => { const keys = fs .readdirSync(searchIndexPath, { withFileTypes: true }) .filter(item => !item.isDirectory()) .map(item => item.name.slice(0, -5)) for (let i = 0, key; i < keys.length; i += 1) { key = keys[i] const data = fs.readFileSync(`${searchIndexPath}${key}.json`, 'utf8') index.import(key, data ?? null) } } const searchStuff = () => { retrieveIndex() console.log('cached search', index.search('fo')) } searchStuff()
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda