rebuild-search-index.mjs 1004 B

1234567891011121314151617181920212223242526272829303132333435
  1. import { pipeline } from 'node:stream/promises'
  2. import { Transform } from 'node:stream'
  3. export async function task ({ payload }) {
  4. WIKI.logger.info('Rebuilding search index...')
  5. try {
  6. await WIKI.ensureDb()
  7. let idx = 0
  8. await pipeline(
  9. WIKI.db.knex.select('id', 'title', 'description', 'locale', 'render', 'password').from('pages').stream(),
  10. new Transform({
  11. objectMode: true,
  12. transform: async (page, enc, cb) => {
  13. idx++
  14. await WIKI.db.pages.updatePageSearchVector({ page })
  15. if (idx % 50 === 0) {
  16. WIKI.logger.info(`Rebuilding search index... (${idx} processed)`)
  17. }
  18. cb()
  19. }
  20. })
  21. )
  22. WIKI.logger.info('Refreshing autocomplete index...')
  23. await WIKI.db.pages.refreshAutocompleteIndex()
  24. WIKI.logger.info('Rebuilt search index: [ COMPLETED ]')
  25. } catch (err) {
  26. WIKI.logger.error('Rebuilding search index: [ FAILED ]')
  27. WIKI.logger.error(err.message)
  28. throw err
  29. }
  30. }