diff --git a/backend/src/db/migrate/store.js b/backend/src/db/migrate/store.js index ac762647b..0c0b63943 100644 --- a/backend/src/db/migrate/store.js +++ b/backend/src/db/migrate/store.js @@ -86,13 +86,6 @@ class Store { if (CONFIG.CATEGORIES_ACTIVE) await createCategories(session) const writeTxResultPromise = session.writeTransaction(async (txc) => { await txc.run('CALL apoc.schema.assert({},{},true)') // drop all indices and constraints - return Promise.all( - [ - 'CALL db.index.fulltext.createNodeIndex("user_fulltext_search",["User"],["name", "slug"])', - 'CALL db.index.fulltext.createNodeIndex("post_fulltext_search",["Post"],["title", "content"])', - 'CALL db.index.fulltext.createNodeIndex("tag_fulltext_search",["Tag"],["id"])', - ].map((statement) => txc.run(statement)), - ) }) try { await writeTxResultPromise diff --git a/backend/src/db/migrations/20230320130345-fulltext-search-indexes.js b/backend/src/db/migrations/20230320130345-fulltext-search-indexes.js new file mode 100644 index 000000000..3e4866618 --- /dev/null +++ b/backend/src/db/migrations/20230320130345-fulltext-search-indexes.js @@ -0,0 +1,54 @@ +import { getDriver } from '../../db/neo4j' + +export const description = '' + +export async function up(next) { + const driver = getDriver() + const session = driver.session() + const transaction = session.beginTransaction() + + try { + // Drop all indexes because due to legacy code they might be set already + await transaction.run(`CALL db.index.fulltext.drop("user_fulltext_search")`) + await transaction.run(`CALL db.index.fulltext.drop("post_fulltext_search")`) + await transaction.run(`CALL db.index.fulltext.drop("tag_fulltext_search")`) + // Create indexes + await transaction.run(`CALL db.index.fulltext.createNodeIndex("user_fulltext_search",["User"],["name", "slug"])`) + await transaction.run(`CALL db.index.fulltext.createNodeIndex("post_fulltext_search",["Post"],["title", "content"])`) + await transaction.run(`CALL db.index.fulltext.createNodeIndex("tag_fulltext_search",["Tag"],["id"])`) + await transaction.commit() + next() + } catch (error) { + // eslint-disable-next-line no-console + console.log(error) + await transaction.rollback() + // eslint-disable-next-line no-console + console.log('rolled back') + throw new Error(error) + } finally { + session.close() + } +} + +export async function down(next) { + const driver = getDriver() + const session = driver.session() + const transaction = session.beginTransaction() + + try { + await transaction.run(`CALL db.index.fulltext.drop("user_fulltext_search")`) + await transaction.run(`CALL db.index.fulltext.drop("post_fulltext_search")`) + await transaction.run(`CALL db.index.fulltext.drop("tag_fulltext_search")`) + await transaction.commit() + next() + } catch (error) { + // eslint-disable-next-line no-console + console.log(error) + await transaction.rollback() + // eslint-disable-next-line no-console + console.log('rolled back') + throw new Error(error) + } finally { + session.close() + } +}