import { config as setupEnv } from 'dotenv-flow'; import { AlgoliaIndexKind, AlgoliaSearchIndex } from '@/services'; setupEnv(); const virtual = (name: string): string => `virtual(${name})`; const main = async () => { // need the primary index to be created before hand const algoliaIndex = AlgoliaSearchIndex.fromIndex(AlgoliaIndexKind.PAGES); // create replicas and add main ranking await algoliaIndex.setSettings({ replicas: [ virtual(AlgoliaIndexKind.PAGES_NAME_ASC), virtual(AlgoliaIndexKind.PAGES_PRICE_ASC), virtual(AlgoliaIndexKind.PAGES_PRICE_DESC), virtual(AlgoliaIndexKind.PAGES_SAVING_DESC), ], ranking: [ 'desc(availability)', 'desc(featured)', 'desc(lastmodified)', 'typo', 'geo', 'words', 'filters', 'proximity', 'attribute', 'exact', 'custom', ], }); // update sort settings // Name asc index const nameAscIndex = AlgoliaSearchIndex.fromIndex( AlgoliaIndexKind.PAGES_NAME_ASC ); await nameAscIndex.setSettings({ customRanking: ['asc(name)'], }); // Price asc index const priceAscIndex = AlgoliaSearchIndex.fromIndex( AlgoliaIndexKind.PAGES_PRICE_ASC ); await priceAscIndex.setSettings({ customRanking: ['asc(lowest_price.price)'], }); // Price desc index const priceDescIndex = AlgoliaSearchIndex.fromIndex( AlgoliaIndexKind.PAGES_PRICE_DESC ); await priceDescIndex.setSettings({ customRanking: ['desc(lowest_price.price)'], }); // Saving desc index const savingDescIndex = AlgoliaSearchIndex.fromIndex( AlgoliaIndexKind.PAGES_SAVING_DESC ); await savingDescIndex.setSettings({ customRanking: ['desc(savingRatio)'], }); }; console.time('main'); main() .then(() => { console.timeEnd('main'); }) .catch((error) => { console.error(error); process.exit(1); });