[{"data":1,"prerenderedAt":2432},["ShallowReactive",2],{"docs-cloud/migrate":3},{"id":4,"title":5,"body":6,"description":2422,"extension":2423,"meta":2424,"navigation":208,"path":2425,"seo":2426,"seoDescription":2427,"seoTitle":2428,"sitemap":2429,"stem":2430,"__hash__":2431},"docs/docs/cloud/migrate.md","Migrate to CelerSearch",{"type":7,"value":8,"toc":2415},"minimark",[9,13,17,22,95,99,102,2246,2249,2298,2308,2316,2320,2346,2350,2375,2379,2401,2411],[10,11,5],"h1",{"id":12},"migrate-to-celersearch",[14,15,16],"p",{},"Moving from Meilisearch Cloud or a self-hosted Meilisearch means copying your\nindexes over the API: create each index, apply its settings, copy its\ndocuments, then point your app at the new endpoint. The script on this page\ndoes all of it.",[18,19,21],"h2",{"id":20},"before-you-start","Before you start",[23,24,25,39,61,89],"ol",{},[26,27,28,32,33,38],"li",{},[29,30,31],"strong",{},"Count your documents."," The script prints the total before it copies\nanything. Pick a ",[34,35,37],"a",{"href":36},"/docs/cloud/plans","plan"," whose document limit covers it.\nThe limit applies across all indexes.",[26,40,41,44,45,51,52,55,56,60],{},[29,42,43],{},"Create your instance"," at ",[34,46,50],{"href":47,"rel":48},"https://app.celersearch.com",[49],"nofollow","app.celersearch.com","\nand choose the ",[29,53,54],{},"same or a newer"," Meilisearch version than your source. See\n",[34,57,59],{"href":58},"/docs/cloud/provisioning","Regions & Provisioning",".",[26,62,63,66],{},[29,64,65],{},"Get both sets of credentials:",[67,68,69,75],"ul",{},[26,70,71,74],{},[29,72,73],{},"Source",": the URL and a key that can read indexes, settings, documents\nand stats. That's the master key on a self-hosted instance, or the\nDefault Admin API Key on Meilisearch Cloud.",[26,76,77,80,81,84,85,60],{},[29,78,79],{},"Target",": the endpoint URL and API key from your instance's\n",[29,82,83],{},"Connection details",". See ",[34,86,88],{"href":87},"/docs/cloud/connect-any-app","Connect Any App",[26,90,91,94],{},[29,92,93],{},"Pause writes to the source"," while the script runs, or plan to re-run it\nat the end. Re-running is safe because documents are replaced by primary key.",[18,96,98],{"id":97},"the-migration-script","The migration script",[14,100,101],{},"It needs Node.js 18 or newer and has no dependencies. Your source must run\nMeilisearch 1.2 or newer.",[103,104,110],"pre",{"className":105,"code":106,"filename":107,"language":108,"meta":109,"style":109},"language-js shiki shiki-themes github-light github-dark","// Copies every index (settings and documents) from one Meilisearch to another.\n// SOURCE_URL=… SOURCE_KEY=… TARGET_URL=… TARGET_KEY=… node migrate.mjs\nconst { SOURCE_URL, SOURCE_KEY, TARGET_URL, TARGET_KEY, EMBEDDER_API_KEY } = process.env\nconst BATCH_SIZE = Number(process.env.BATCH_SIZE || 1000)\n\nif (!SOURCE_URL || !SOURCE_KEY || !TARGET_URL || !TARGET_KEY) {\n  console.error('Set SOURCE_URL, SOURCE_KEY, TARGET_URL and TARGET_KEY.')\n  process.exit(1)\n}\n\nasync function api(base, key, method, path, body) {\n  const res = await fetch(base.replace(/\\/+$/, '') + path, {\n    method,\n    headers: { Authorization: `Bearer ${key}`, 'Content-Type': 'application/json' },\n    body: body === undefined ? undefined : JSON.stringify(body),\n  })\n  const text = await res.text()\n  let data = null\n  try { data = text ? JSON.parse(text) : null } catch { data = null }\n  if (!res.ok) {\n    const error = new Error(`${method} ${path} failed (${res.status}): ${data?.message ?? text}`)\n    error.status = res.status\n    error.code = data?.code ?? data?.error\n    throw error\n  }\n  return data\n}\n\nconst source = (method, path, body) => api(SOURCE_URL, SOURCE_KEY, method, path, body)\nconst target = (method, path, body) => api(TARGET_URL, TARGET_KEY, method, path, body)\n\nasync function waitForTask({ taskUid }) {\n  for (;;) {\n    const task = await target('GET', `/tasks/${taskUid}`)\n    if (task.status === 'succeeded') return\n    if (task.status === 'failed' || task.status === 'canceled') {\n      throw new Error(`Task ${taskUid} ${task.status}: ${task.error?.message ?? ''}`)\n    }\n    await new Promise((resolve) => setTimeout(resolve, 500))\n  }\n}\n\nasync function listIndexes() {\n  const indexes = []\n  for (let offset = 0; ; offset += 100) {\n    const page = await source('GET', `/indexes?offset=${offset}&limit=100`)\n    indexes.push(...page.results)\n    if (page.results.length === 0 || indexes.length >= page.total) return indexes\n  }\n}\n\n// Copies settings and returns the embedders whose vectors live in the documents.\nasync function copySettings(uid) {\n  const settings = await source('GET', `/indexes/${uid}/settings`)\n  const userProvided = []\n\n  for (const [name, embedder] of Object.entries(settings.embedders ?? {})) {\n    if (embedder.source === 'userProvided') userProvided.push(name)\n    // API keys come back partially hidden, so they can't be copied as-is.\n    if (embedder.apiKey == null && embedder.source !== 'openAi') continue\n    if (EMBEDDER_API_KEY) {\n      embedder.apiKey = EMBEDDER_API_KEY\n    } else {\n      delete settings.embedders[name]\n      console.warn(`  ! Skipped embedder \"${name}\": set EMBEDDER_API_KEY and re-run, or add it later.`)\n    }\n  }\n\n  await waitForTask(await target('PATCH', `/indexes/${uid}/settings`, settings))\n  return userProvided\n}\n\nasync function copyDocuments(uid, userProvided) {\n  for (let offset = 0; ; offset += BATCH_SIZE) {\n    const page = await source('POST', `/indexes/${uid}/documents/fetch`, {\n      offset,\n      limit: BATCH_SIZE,\n      ...(userProvided.length > 0 ? { retrieveVectors: true } : {}),\n    })\n    if (page.results.length === 0) return\n\n    // Keep only user-provided vectors; other embedders re-embed on the target.\n    const documents = page.results.map(({ _vectors, ...doc }) => {\n      const vectors = Object.fromEntries(\n        Object.entries(_vectors ?? {}).filter(([name]) => userProvided.includes(name)),\n      )\n      return Object.keys(vectors).length > 0 ? { ...doc, _vectors: vectors } : doc\n    })\n\n    await waitForTask(await target('POST', `/indexes/${uid}/documents`, documents))\n    const copied = offset + page.results.length\n    console.log(`  ${copied} / ${page.total} documents`)\n    if (copied >= page.total) return\n  }\n}\n\nasync function main() {\n  const stats = await source('GET', '/stats')\n  const indexes = await listIndexes()\n  const total = indexes.reduce((sum, { uid }) => sum + (stats.indexes[uid]?.numberOfDocuments ?? 0), 0)\n  console.log(`${indexes.length} indexes, ${total} documents to copy`)\n\n  for (const { uid, primaryKey } of indexes) {\n    console.log(`→ ${uid}`)\n    try {\n      await target('GET', `/indexes/${uid}`)\n    } catch (error) {\n      if (error.status !== 404) throw error\n      await waitForTask(await target('POST', '/indexes', { uid, ...(primaryKey ? { primaryKey } : {}) }))\n    }\n    const userProvided = await copySettings(uid)\n    await copyDocuments(uid, userProvided)\n  }\n\n  console.log('Done.')\n}\n\nmain().catch((error) => {\n  console.error(error.message)\n  if (error.code === 'document_quota_exceeded') {\n    console.error('Your plan\\'s document limit is reached. Move to a larger plan and re-run.')\n  }\n  process.exit(1)\n})\n","migrate.mjs","js","",[111,112,113,122,128,173,203,210,246,264,280,286,291,331,382,388,416,447,453,474,488,535,548,609,620,637,646,652,661,666,671,711,749,754,773,782,812,831,855,901,907,940,945,950,955,968,981,1010,1041,1058,1093,1098,1103,1108,1114,1131,1161,1173,1178,1218,1239,1245,1275,1286,1297,1309,1318,1339,1344,1349,1354,1385,1393,1398,1403,1424,1447,1477,1483,1494,1525,1531,1548,1553,1559,1595,1614,1652,1658,1692,1697,1702,1731,1750,1783,1798,1803,1808,1813,1825,1850,1865,1914,1942,1947,1972,1990,1998,2020,2030,2051,2091,2096,2112,2122,2127,2132,2146,2151,2156,2177,2187,2202,2222,2227,2240],"code",{"__ignoreMap":109},[114,115,118],"span",{"class":116,"line":117},"line",1,[114,119,121],{"class":120},"sJ8bj","// Copies every index (settings and documents) from one Meilisearch to another.\n",[114,123,125],{"class":116,"line":124},2,[114,126,127],{"class":120},"// SOURCE_URL=… SOURCE_KEY=… TARGET_URL=… TARGET_KEY=… node migrate.mjs\n",[114,129,131,135,139,143,146,149,151,154,156,159,161,164,167,170],{"class":116,"line":130},3,[114,132,134],{"class":133},"szBVR","const",[114,136,138],{"class":137},"sVt8B"," { ",[114,140,142],{"class":141},"sj4cs","SOURCE_URL",[114,144,145],{"class":137},", ",[114,147,148],{"class":141},"SOURCE_KEY",[114,150,145],{"class":137},[114,152,153],{"class":141},"TARGET_URL",[114,155,145],{"class":137},[114,157,158],{"class":141},"TARGET_KEY",[114,160,145],{"class":137},[114,162,163],{"class":141},"EMBEDDER_API_KEY",[114,165,166],{"class":137}," } ",[114,168,169],{"class":133},"=",[114,171,172],{"class":137}," process.env\n",[114,174,176,178,181,184,188,191,194,197,200],{"class":116,"line":175},4,[114,177,134],{"class":133},[114,179,180],{"class":141}," BATCH_SIZE",[114,182,183],{"class":133}," =",[114,185,187],{"class":186},"sScJk"," Number",[114,189,190],{"class":137},"(process.env.",[114,192,193],{"class":141},"BATCH_SIZE",[114,195,196],{"class":133}," ||",[114,198,199],{"class":141}," 1000",[114,201,202],{"class":137},")\n",[114,204,206],{"class":116,"line":205},5,[114,207,209],{"emptyLinePlaceholder":208},true,"\n",[114,211,213,216,219,222,224,226,229,231,233,235,237,239,241,243],{"class":116,"line":212},6,[114,214,215],{"class":133},"if",[114,217,218],{"class":137}," (",[114,220,221],{"class":133},"!",[114,223,142],{"class":141},[114,225,196],{"class":133},[114,227,228],{"class":133}," !",[114,230,148],{"class":141},[114,232,196],{"class":133},[114,234,228],{"class":133},[114,236,153],{"class":141},[114,238,196],{"class":133},[114,240,228],{"class":133},[114,242,158],{"class":141},[114,244,245],{"class":137},") {\n",[114,247,249,252,255,258,262],{"class":116,"line":248},7,[114,250,251],{"class":137},"  console.",[114,253,254],{"class":186},"error",[114,256,257],{"class":137},"(",[114,259,261],{"class":260},"sZZnC","'Set SOURCE_URL, SOURCE_KEY, TARGET_URL and TARGET_KEY.'",[114,263,202],{"class":137},[114,265,267,270,273,275,278],{"class":116,"line":266},8,[114,268,269],{"class":137},"  process.",[114,271,272],{"class":186},"exit",[114,274,257],{"class":137},[114,276,277],{"class":141},"1",[114,279,202],{"class":137},[114,281,283],{"class":116,"line":282},9,[114,284,285],{"class":137},"}\n",[114,287,289],{"class":116,"line":288},10,[114,290,209],{"emptyLinePlaceholder":208},[114,292,294,297,300,303,305,309,311,314,316,319,321,324,326,329],{"class":116,"line":293},11,[114,295,296],{"class":133},"async",[114,298,299],{"class":133}," function",[114,301,302],{"class":186}," api",[114,304,257],{"class":137},[114,306,308],{"class":307},"s4XuR","base",[114,310,145],{"class":137},[114,312,313],{"class":307},"key",[114,315,145],{"class":137},[114,317,318],{"class":307},"method",[114,320,145],{"class":137},[114,322,323],{"class":307},"path",[114,325,145],{"class":137},[114,327,328],{"class":307},"body",[114,330,245],{"class":137},[114,332,334,337,340,342,345,348,351,354,356,359,363,366,368,370,373,376,379],{"class":116,"line":333},12,[114,335,336],{"class":133},"  const",[114,338,339],{"class":141}," res",[114,341,183],{"class":133},[114,343,344],{"class":133}," await",[114,346,347],{"class":186}," fetch",[114,349,350],{"class":137},"(base.",[114,352,353],{"class":186},"replace",[114,355,257],{"class":137},[114,357,358],{"class":260},"/",[114,360,362],{"class":361},"snhLl","\\/",[114,364,365],{"class":133},"+$",[114,367,358],{"class":260},[114,369,145],{"class":137},[114,371,372],{"class":260},"''",[114,374,375],{"class":137},") ",[114,377,378],{"class":133},"+",[114,380,381],{"class":137}," path, {\n",[114,383,385],{"class":116,"line":384},13,[114,386,387],{"class":137},"    method,\n",[114,389,391,394,397,399,402,404,407,410,413],{"class":116,"line":390},14,[114,392,393],{"class":137},"    headers: { Authorization: ",[114,395,396],{"class":260},"`Bearer ${",[114,398,313],{"class":137},[114,400,401],{"class":260},"}`",[114,403,145],{"class":137},[114,405,406],{"class":260},"'Content-Type'",[114,408,409],{"class":137},": ",[114,411,412],{"class":260},"'application/json'",[114,414,415],{"class":137}," },\n",[114,417,419,422,425,428,431,433,436,439,441,444],{"class":116,"line":418},15,[114,420,421],{"class":137},"    body: body ",[114,423,424],{"class":133},"===",[114,426,427],{"class":141}," undefined",[114,429,430],{"class":133}," ?",[114,432,427],{"class":141},[114,434,435],{"class":133}," :",[114,437,438],{"class":141}," JSON",[114,440,60],{"class":137},[114,442,443],{"class":186},"stringify",[114,445,446],{"class":137},"(body),\n",[114,448,450],{"class":116,"line":449},16,[114,451,452],{"class":137},"  })\n",[114,454,456,458,461,463,465,468,471],{"class":116,"line":455},17,[114,457,336],{"class":133},[114,459,460],{"class":141}," text",[114,462,183],{"class":133},[114,464,344],{"class":133},[114,466,467],{"class":137}," res.",[114,469,470],{"class":186},"text",[114,472,473],{"class":137},"()\n",[114,475,477,480,483,485],{"class":116,"line":476},18,[114,478,479],{"class":133},"  let",[114,481,482],{"class":137}," data ",[114,484,169],{"class":133},[114,486,487],{"class":141}," null\n",[114,489,491,494,497,499,502,505,507,509,512,515,518,521,523,526,528,530,532],{"class":116,"line":490},19,[114,492,493],{"class":133},"  try",[114,495,496],{"class":137}," { data ",[114,498,169],{"class":133},[114,500,501],{"class":137}," text ",[114,503,504],{"class":133},"?",[114,506,438],{"class":141},[114,508,60],{"class":137},[114,510,511],{"class":186},"parse",[114,513,514],{"class":137},"(text) ",[114,516,517],{"class":133},":",[114,519,520],{"class":141}," null",[114,522,166],{"class":137},[114,524,525],{"class":133},"catch",[114,527,496],{"class":137},[114,529,169],{"class":133},[114,531,520],{"class":141},[114,533,534],{"class":137}," }\n",[114,536,538,541,543,545],{"class":116,"line":537},20,[114,539,540],{"class":133},"  if",[114,542,218],{"class":137},[114,544,221],{"class":133},[114,546,547],{"class":137},"res.ok) {\n",[114,549,551,554,557,559,562,565,567,570,572,575,577,580,583,585,588,591,594,597,600,603,605,607],{"class":116,"line":550},21,[114,552,553],{"class":133},"    const",[114,555,556],{"class":141}," error",[114,558,183],{"class":133},[114,560,561],{"class":133}," new",[114,563,564],{"class":186}," Error",[114,566,257],{"class":137},[114,568,569],{"class":260},"`${",[114,571,318],{"class":137},[114,573,574],{"class":260},"} ${",[114,576,323],{"class":137},[114,578,579],{"class":260},"} failed (${",[114,581,582],{"class":137},"res",[114,584,60],{"class":260},[114,586,587],{"class":137},"status",[114,589,590],{"class":260},"}): ${",[114,592,593],{"class":137},"data",[114,595,596],{"class":260},"?.",[114,598,599],{"class":137},"message",[114,601,602],{"class":133}," ??",[114,604,460],{"class":137},[114,606,401],{"class":260},[114,608,202],{"class":137},[114,610,612,615,617],{"class":116,"line":611},22,[114,613,614],{"class":137},"    error.status ",[114,616,169],{"class":133},[114,618,619],{"class":137}," res.status\n",[114,621,623,626,628,631,634],{"class":116,"line":622},23,[114,624,625],{"class":137},"    error.code ",[114,627,169],{"class":133},[114,629,630],{"class":137}," data?.code ",[114,632,633],{"class":133},"??",[114,635,636],{"class":137}," data?.error\n",[114,638,640,643],{"class":116,"line":639},24,[114,641,642],{"class":133},"    throw",[114,644,645],{"class":137}," error\n",[114,647,649],{"class":116,"line":648},25,[114,650,651],{"class":137},"  }\n",[114,653,655,658],{"class":116,"line":654},26,[114,656,657],{"class":133},"  return",[114,659,660],{"class":137}," data\n",[114,662,664],{"class":116,"line":663},27,[114,665,285],{"class":137},[114,667,669],{"class":116,"line":668},28,[114,670,209],{"emptyLinePlaceholder":208},[114,672,674,676,679,681,683,685,687,689,691,693,695,698,700,702,704,706,708],{"class":116,"line":673},29,[114,675,134],{"class":133},[114,677,678],{"class":186}," source",[114,680,183],{"class":133},[114,682,218],{"class":137},[114,684,318],{"class":307},[114,686,145],{"class":137},[114,688,323],{"class":307},[114,690,145],{"class":137},[114,692,328],{"class":307},[114,694,375],{"class":137},[114,696,697],{"class":133},"=>",[114,699,302],{"class":186},[114,701,257],{"class":137},[114,703,142],{"class":141},[114,705,145],{"class":137},[114,707,148],{"class":141},[114,709,710],{"class":137},", method, path, body)\n",[114,712,714,716,719,721,723,725,727,729,731,733,735,737,739,741,743,745,747],{"class":116,"line":713},30,[114,715,134],{"class":133},[114,717,718],{"class":186}," target",[114,720,183],{"class":133},[114,722,218],{"class":137},[114,724,318],{"class":307},[114,726,145],{"class":137},[114,728,323],{"class":307},[114,730,145],{"class":137},[114,732,328],{"class":307},[114,734,375],{"class":137},[114,736,697],{"class":133},[114,738,302],{"class":186},[114,740,257],{"class":137},[114,742,153],{"class":141},[114,744,145],{"class":137},[114,746,158],{"class":141},[114,748,710],{"class":137},[114,750,752],{"class":116,"line":751},31,[114,753,209],{"emptyLinePlaceholder":208},[114,755,757,759,761,764,767,770],{"class":116,"line":756},32,[114,758,296],{"class":133},[114,760,299],{"class":133},[114,762,763],{"class":186}," waitForTask",[114,765,766],{"class":137},"({ ",[114,768,769],{"class":307},"taskUid",[114,771,772],{"class":137}," }) {\n",[114,774,776,779],{"class":116,"line":775},33,[114,777,778],{"class":133},"  for",[114,780,781],{"class":137}," (;;) {\n",[114,783,785,787,790,792,794,796,798,801,803,806,808,810],{"class":116,"line":784},34,[114,786,553],{"class":133},[114,788,789],{"class":141}," task",[114,791,183],{"class":133},[114,793,344],{"class":133},[114,795,718],{"class":186},[114,797,257],{"class":137},[114,799,800],{"class":260},"'GET'",[114,802,145],{"class":137},[114,804,805],{"class":260},"`/tasks/${",[114,807,769],{"class":137},[114,809,401],{"class":260},[114,811,202],{"class":137},[114,813,815,818,821,823,826,828],{"class":116,"line":814},35,[114,816,817],{"class":133},"    if",[114,819,820],{"class":137}," (task.status ",[114,822,424],{"class":133},[114,824,825],{"class":260}," 'succeeded'",[114,827,375],{"class":137},[114,829,830],{"class":133},"return\n",[114,832,834,836,838,840,843,845,848,850,853],{"class":116,"line":833},36,[114,835,817],{"class":133},[114,837,820],{"class":137},[114,839,424],{"class":133},[114,841,842],{"class":260}," 'failed'",[114,844,196],{"class":133},[114,846,847],{"class":137}," task.status ",[114,849,424],{"class":133},[114,851,852],{"class":260}," 'canceled'",[114,854,245],{"class":137},[114,856,858,861,863,865,867,870,872,874,877,879,881,884,886,888,890,892,894,896,899],{"class":116,"line":857},37,[114,859,860],{"class":133},"      throw",[114,862,561],{"class":133},[114,864,564],{"class":186},[114,866,257],{"class":137},[114,868,869],{"class":260},"`Task ${",[114,871,769],{"class":137},[114,873,574],{"class":260},[114,875,876],{"class":137},"task",[114,878,60],{"class":260},[114,880,587],{"class":137},[114,882,883],{"class":260},"}: ${",[114,885,876],{"class":137},[114,887,60],{"class":260},[114,889,254],{"class":137},[114,891,596],{"class":260},[114,893,599],{"class":137},[114,895,602],{"class":133},[114,897,898],{"class":260}," ''}`",[114,900,202],{"class":137},[114,902,904],{"class":116,"line":903},38,[114,905,906],{"class":137},"    }\n",[114,908,910,913,915,918,921,924,926,928,931,934,937],{"class":116,"line":909},39,[114,911,912],{"class":133},"    await",[114,914,561],{"class":133},[114,916,917],{"class":141}," Promise",[114,919,920],{"class":137},"((",[114,922,923],{"class":307},"resolve",[114,925,375],{"class":137},[114,927,697],{"class":133},[114,929,930],{"class":186}," setTimeout",[114,932,933],{"class":137},"(resolve, ",[114,935,936],{"class":141},"500",[114,938,939],{"class":137},"))\n",[114,941,943],{"class":116,"line":942},40,[114,944,651],{"class":137},[114,946,948],{"class":116,"line":947},41,[114,949,285],{"class":137},[114,951,953],{"class":116,"line":952},42,[114,954,209],{"emptyLinePlaceholder":208},[114,956,958,960,962,965],{"class":116,"line":957},43,[114,959,296],{"class":133},[114,961,299],{"class":133},[114,963,964],{"class":186}," listIndexes",[114,966,967],{"class":137},"() {\n",[114,969,971,973,976,978],{"class":116,"line":970},44,[114,972,336],{"class":133},[114,974,975],{"class":141}," indexes",[114,977,183],{"class":133},[114,979,980],{"class":137}," []\n",[114,982,984,986,988,991,994,996,999,1002,1005,1008],{"class":116,"line":983},45,[114,985,778],{"class":133},[114,987,218],{"class":137},[114,989,990],{"class":133},"let",[114,992,993],{"class":137}," offset ",[114,995,169],{"class":133},[114,997,998],{"class":141}," 0",[114,1000,1001],{"class":137},"; ; offset ",[114,1003,1004],{"class":133},"+=",[114,1006,1007],{"class":141}," 100",[114,1009,245],{"class":137},[114,1011,1013,1015,1018,1020,1022,1024,1026,1028,1030,1033,1036,1039],{"class":116,"line":1012},46,[114,1014,553],{"class":133},[114,1016,1017],{"class":141}," page",[114,1019,183],{"class":133},[114,1021,344],{"class":133},[114,1023,678],{"class":186},[114,1025,257],{"class":137},[114,1027,800],{"class":260},[114,1029,145],{"class":137},[114,1031,1032],{"class":260},"`/indexes?offset=${",[114,1034,1035],{"class":137},"offset",[114,1037,1038],{"class":260},"}&limit=100`",[114,1040,202],{"class":137},[114,1042,1044,1047,1050,1052,1055],{"class":116,"line":1043},47,[114,1045,1046],{"class":137},"    indexes.",[114,1048,1049],{"class":186},"push",[114,1051,257],{"class":137},[114,1053,1054],{"class":133},"...",[114,1056,1057],{"class":137},"page.results)\n",[114,1059,1061,1063,1066,1069,1072,1074,1076,1079,1081,1084,1087,1090],{"class":116,"line":1060},48,[114,1062,817],{"class":133},[114,1064,1065],{"class":137}," (page.results.",[114,1067,1068],{"class":141},"length",[114,1070,1071],{"class":133}," ===",[114,1073,998],{"class":141},[114,1075,196],{"class":133},[114,1077,1078],{"class":137}," indexes.",[114,1080,1068],{"class":141},[114,1082,1083],{"class":133}," >=",[114,1085,1086],{"class":137}," page.total) ",[114,1088,1089],{"class":133},"return",[114,1091,1092],{"class":137}," indexes\n",[114,1094,1096],{"class":116,"line":1095},49,[114,1097,651],{"class":137},[114,1099,1101],{"class":116,"line":1100},50,[114,1102,285],{"class":137},[114,1104,1106],{"class":116,"line":1105},51,[114,1107,209],{"emptyLinePlaceholder":208},[114,1109,1111],{"class":116,"line":1110},52,[114,1112,1113],{"class":120},"// Copies settings and returns the embedders whose vectors live in the documents.\n",[114,1115,1117,1119,1121,1124,1126,1129],{"class":116,"line":1116},53,[114,1118,296],{"class":133},[114,1120,299],{"class":133},[114,1122,1123],{"class":186}," copySettings",[114,1125,257],{"class":137},[114,1127,1128],{"class":307},"uid",[114,1130,245],{"class":137},[114,1132,1134,1136,1139,1141,1143,1145,1147,1149,1151,1154,1156,1159],{"class":116,"line":1133},54,[114,1135,336],{"class":133},[114,1137,1138],{"class":141}," settings",[114,1140,183],{"class":133},[114,1142,344],{"class":133},[114,1144,678],{"class":186},[114,1146,257],{"class":137},[114,1148,800],{"class":260},[114,1150,145],{"class":137},[114,1152,1153],{"class":260},"`/indexes/${",[114,1155,1128],{"class":137},[114,1157,1158],{"class":260},"}/settings`",[114,1160,202],{"class":137},[114,1162,1164,1166,1169,1171],{"class":116,"line":1163},55,[114,1165,336],{"class":133},[114,1167,1168],{"class":141}," userProvided",[114,1170,183],{"class":133},[114,1172,980],{"class":137},[114,1174,1176],{"class":116,"line":1175},56,[114,1177,209],{"emptyLinePlaceholder":208},[114,1179,1181,1183,1185,1187,1190,1193,1195,1198,1201,1204,1207,1210,1213,1215],{"class":116,"line":1180},57,[114,1182,778],{"class":133},[114,1184,218],{"class":137},[114,1186,134],{"class":133},[114,1188,1189],{"class":137}," [",[114,1191,1192],{"class":141},"name",[114,1194,145],{"class":137},[114,1196,1197],{"class":141},"embedder",[114,1199,1200],{"class":137},"] ",[114,1202,1203],{"class":133},"of",[114,1205,1206],{"class":137}," Object.",[114,1208,1209],{"class":186},"entries",[114,1211,1212],{"class":137},"(settings.embedders ",[114,1214,633],{"class":133},[114,1216,1217],{"class":137}," {})) {\n",[114,1219,1221,1223,1226,1228,1231,1234,1236],{"class":116,"line":1220},58,[114,1222,817],{"class":133},[114,1224,1225],{"class":137}," (embedder.source ",[114,1227,424],{"class":133},[114,1229,1230],{"class":260}," 'userProvided'",[114,1232,1233],{"class":137},") userProvided.",[114,1235,1049],{"class":186},[114,1237,1238],{"class":137},"(name)\n",[114,1240,1242],{"class":116,"line":1241},59,[114,1243,1244],{"class":120},"    // API keys come back partially hidden, so they can't be copied as-is.\n",[114,1246,1248,1250,1253,1256,1258,1261,1264,1267,1270,1272],{"class":116,"line":1247},60,[114,1249,817],{"class":133},[114,1251,1252],{"class":137}," (embedder.apiKey ",[114,1254,1255],{"class":133},"==",[114,1257,520],{"class":141},[114,1259,1260],{"class":133}," &&",[114,1262,1263],{"class":137}," embedder.source ",[114,1265,1266],{"class":133},"!==",[114,1268,1269],{"class":260}," 'openAi'",[114,1271,375],{"class":137},[114,1273,1274],{"class":133},"continue\n",[114,1276,1278,1280,1282,1284],{"class":116,"line":1277},61,[114,1279,817],{"class":133},[114,1281,218],{"class":137},[114,1283,163],{"class":141},[114,1285,245],{"class":137},[114,1287,1289,1292,1294],{"class":116,"line":1288},62,[114,1290,1291],{"class":137},"      embedder.apiKey ",[114,1293,169],{"class":133},[114,1295,1296],{"class":141}," EMBEDDER_API_KEY\n",[114,1298,1300,1303,1306],{"class":116,"line":1299},63,[114,1301,1302],{"class":137},"    } ",[114,1304,1305],{"class":133},"else",[114,1307,1308],{"class":137}," {\n",[114,1310,1312,1315],{"class":116,"line":1311},64,[114,1313,1314],{"class":133},"      delete",[114,1316,1317],{"class":137}," settings.embedders[name]\n",[114,1319,1321,1324,1327,1329,1332,1334,1337],{"class":116,"line":1320},65,[114,1322,1323],{"class":137},"      console.",[114,1325,1326],{"class":186},"warn",[114,1328,257],{"class":137},[114,1330,1331],{"class":260},"`  ! Skipped embedder \"${",[114,1333,1192],{"class":137},[114,1335,1336],{"class":260},"}\": set EMBEDDER_API_KEY and re-run, or add it later.`",[114,1338,202],{"class":137},[114,1340,1342],{"class":116,"line":1341},66,[114,1343,906],{"class":137},[114,1345,1347],{"class":116,"line":1346},67,[114,1348,651],{"class":137},[114,1350,1352],{"class":116,"line":1351},68,[114,1353,209],{"emptyLinePlaceholder":208},[114,1355,1357,1360,1362,1364,1367,1369,1371,1374,1376,1378,1380,1382],{"class":116,"line":1356},69,[114,1358,1359],{"class":133},"  await",[114,1361,763],{"class":186},[114,1363,257],{"class":137},[114,1365,1366],{"class":133},"await",[114,1368,718],{"class":186},[114,1370,257],{"class":137},[114,1372,1373],{"class":260},"'PATCH'",[114,1375,145],{"class":137},[114,1377,1153],{"class":260},[114,1379,1128],{"class":137},[114,1381,1158],{"class":260},[114,1383,1384],{"class":137},", settings))\n",[114,1386,1388,1390],{"class":116,"line":1387},70,[114,1389,657],{"class":133},[114,1391,1392],{"class":137}," userProvided\n",[114,1394,1396],{"class":116,"line":1395},71,[114,1397,285],{"class":137},[114,1399,1401],{"class":116,"line":1400},72,[114,1402,209],{"emptyLinePlaceholder":208},[114,1404,1406,1408,1410,1413,1415,1417,1419,1422],{"class":116,"line":1405},73,[114,1407,296],{"class":133},[114,1409,299],{"class":133},[114,1411,1412],{"class":186}," copyDocuments",[114,1414,257],{"class":137},[114,1416,1128],{"class":307},[114,1418,145],{"class":137},[114,1420,1421],{"class":307},"userProvided",[114,1423,245],{"class":137},[114,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445],{"class":116,"line":1426},74,[114,1428,778],{"class":133},[114,1430,218],{"class":137},[114,1432,990],{"class":133},[114,1434,993],{"class":137},[114,1436,169],{"class":133},[114,1438,998],{"class":141},[114,1440,1001],{"class":137},[114,1442,1004],{"class":133},[114,1444,180],{"class":141},[114,1446,245],{"class":137},[114,1448,1450,1452,1454,1456,1458,1460,1462,1465,1467,1469,1471,1474],{"class":116,"line":1449},75,[114,1451,553],{"class":133},[114,1453,1017],{"class":141},[114,1455,183],{"class":133},[114,1457,344],{"class":133},[114,1459,678],{"class":186},[114,1461,257],{"class":137},[114,1463,1464],{"class":260},"'POST'",[114,1466,145],{"class":137},[114,1468,1153],{"class":260},[114,1470,1128],{"class":137},[114,1472,1473],{"class":260},"}/documents/fetch`",[114,1475,1476],{"class":137},", {\n",[114,1478,1480],{"class":116,"line":1479},76,[114,1481,1482],{"class":137},"      offset,\n",[114,1484,1486,1489,1491],{"class":116,"line":1485},77,[114,1487,1488],{"class":137},"      limit: ",[114,1490,193],{"class":141},[114,1492,1493],{"class":137},",\n",[114,1495,1497,1500,1503,1505,1508,1510,1512,1515,1518,1520,1522],{"class":116,"line":1496},78,[114,1498,1499],{"class":133},"      ...",[114,1501,1502],{"class":137},"(userProvided.",[114,1504,1068],{"class":141},[114,1506,1507],{"class":133}," >",[114,1509,998],{"class":141},[114,1511,430],{"class":133},[114,1513,1514],{"class":137}," { retrieveVectors: ",[114,1516,1517],{"class":141},"true",[114,1519,166],{"class":137},[114,1521,517],{"class":133},[114,1523,1524],{"class":137}," {}),\n",[114,1526,1528],{"class":116,"line":1527},79,[114,1529,1530],{"class":137},"    })\n",[114,1532,1534,1536,1538,1540,1542,1544,1546],{"class":116,"line":1533},80,[114,1535,817],{"class":133},[114,1537,1065],{"class":137},[114,1539,1068],{"class":141},[114,1541,1071],{"class":133},[114,1543,998],{"class":141},[114,1545,375],{"class":137},[114,1547,830],{"class":133},[114,1549,1551],{"class":116,"line":1550},81,[114,1552,209],{"emptyLinePlaceholder":208},[114,1554,1556],{"class":116,"line":1555},82,[114,1557,1558],{"class":120},"    // Keep only user-provided vectors; other embedders re-embed on the target.\n",[114,1560,1562,1564,1567,1569,1572,1575,1578,1581,1583,1585,1588,1591,1593],{"class":116,"line":1561},83,[114,1563,553],{"class":133},[114,1565,1566],{"class":141}," documents",[114,1568,183],{"class":133},[114,1570,1571],{"class":137}," page.results.",[114,1573,1574],{"class":186},"map",[114,1576,1577],{"class":137},"(({ ",[114,1579,1580],{"class":307},"_vectors",[114,1582,145],{"class":137},[114,1584,1054],{"class":133},[114,1586,1587],{"class":307},"doc",[114,1589,1590],{"class":137}," }) ",[114,1592,697],{"class":133},[114,1594,1308],{"class":137},[114,1596,1598,1601,1604,1606,1608,1611],{"class":116,"line":1597},84,[114,1599,1600],{"class":133},"      const",[114,1602,1603],{"class":141}," vectors",[114,1605,183],{"class":133},[114,1607,1206],{"class":137},[114,1609,1610],{"class":186},"fromEntries",[114,1612,1613],{"class":137},"(\n",[114,1615,1617,1620,1622,1625,1627,1630,1633,1636,1638,1641,1643,1646,1649],{"class":116,"line":1616},85,[114,1618,1619],{"class":137},"        Object.",[114,1621,1209],{"class":186},[114,1623,1624],{"class":137},"(_vectors ",[114,1626,633],{"class":133},[114,1628,1629],{"class":137}," {}).",[114,1631,1632],{"class":186},"filter",[114,1634,1635],{"class":137},"(([",[114,1637,1192],{"class":307},[114,1639,1640],{"class":137},"]) ",[114,1642,697],{"class":133},[114,1644,1645],{"class":137}," userProvided.",[114,1647,1648],{"class":186},"includes",[114,1650,1651],{"class":137},"(name)),\n",[114,1653,1655],{"class":116,"line":1654},86,[114,1656,1657],{"class":137},"      )\n",[114,1659,1661,1664,1666,1669,1672,1674,1676,1678,1680,1682,1684,1687,1689],{"class":116,"line":1660},87,[114,1662,1663],{"class":133},"      return",[114,1665,1206],{"class":137},[114,1667,1668],{"class":186},"keys",[114,1670,1671],{"class":137},"(vectors).",[114,1673,1068],{"class":141},[114,1675,1507],{"class":133},[114,1677,998],{"class":141},[114,1679,430],{"class":133},[114,1681,138],{"class":137},[114,1683,1054],{"class":133},[114,1685,1686],{"class":137},"doc, _vectors: vectors } ",[114,1688,517],{"class":133},[114,1690,1691],{"class":137}," doc\n",[114,1693,1695],{"class":116,"line":1694},88,[114,1696,1530],{"class":137},[114,1698,1700],{"class":116,"line":1699},89,[114,1701,209],{"emptyLinePlaceholder":208},[114,1703,1705,1707,1709,1711,1713,1715,1717,1719,1721,1723,1725,1728],{"class":116,"line":1704},90,[114,1706,912],{"class":133},[114,1708,763],{"class":186},[114,1710,257],{"class":137},[114,1712,1366],{"class":133},[114,1714,718],{"class":186},[114,1716,257],{"class":137},[114,1718,1464],{"class":260},[114,1720,145],{"class":137},[114,1722,1153],{"class":260},[114,1724,1128],{"class":137},[114,1726,1727],{"class":260},"}/documents`",[114,1729,1730],{"class":137},", documents))\n",[114,1732,1734,1736,1739,1741,1743,1745,1747],{"class":116,"line":1733},91,[114,1735,553],{"class":133},[114,1737,1738],{"class":141}," copied",[114,1740,183],{"class":133},[114,1742,993],{"class":137},[114,1744,378],{"class":133},[114,1746,1571],{"class":137},[114,1748,1749],{"class":141},"length\n",[114,1751,1753,1756,1759,1761,1764,1767,1770,1773,1775,1778,1781],{"class":116,"line":1752},92,[114,1754,1755],{"class":137},"    console.",[114,1757,1758],{"class":186},"log",[114,1760,257],{"class":137},[114,1762,1763],{"class":260},"`  ${",[114,1765,1766],{"class":137},"copied",[114,1768,1769],{"class":260},"} / ${",[114,1771,1772],{"class":137},"page",[114,1774,60],{"class":260},[114,1776,1777],{"class":137},"total",[114,1779,1780],{"class":260},"} documents`",[114,1782,202],{"class":137},[114,1784,1786,1788,1791,1794,1796],{"class":116,"line":1785},93,[114,1787,817],{"class":133},[114,1789,1790],{"class":137}," (copied ",[114,1792,1793],{"class":133},">=",[114,1795,1086],{"class":137},[114,1797,830],{"class":133},[114,1799,1801],{"class":116,"line":1800},94,[114,1802,651],{"class":137},[114,1804,1806],{"class":116,"line":1805},95,[114,1807,285],{"class":137},[114,1809,1811],{"class":116,"line":1810},96,[114,1812,209],{"emptyLinePlaceholder":208},[114,1814,1816,1818,1820,1823],{"class":116,"line":1815},97,[114,1817,296],{"class":133},[114,1819,299],{"class":133},[114,1821,1822],{"class":186}," main",[114,1824,967],{"class":137},[114,1826,1828,1830,1833,1835,1837,1839,1841,1843,1845,1848],{"class":116,"line":1827},98,[114,1829,336],{"class":133},[114,1831,1832],{"class":141}," stats",[114,1834,183],{"class":133},[114,1836,344],{"class":133},[114,1838,678],{"class":186},[114,1840,257],{"class":137},[114,1842,800],{"class":260},[114,1844,145],{"class":137},[114,1846,1847],{"class":260},"'/stats'",[114,1849,202],{"class":137},[114,1851,1853,1855,1857,1859,1861,1863],{"class":116,"line":1852},99,[114,1854,336],{"class":133},[114,1856,975],{"class":141},[114,1858,183],{"class":133},[114,1860,344],{"class":133},[114,1862,964],{"class":186},[114,1864,473],{"class":137},[114,1866,1868,1870,1873,1875,1877,1880,1882,1885,1888,1890,1892,1894,1897,1899,1902,1904,1906,1909,1912],{"class":116,"line":1867},100,[114,1869,336],{"class":133},[114,1871,1872],{"class":141}," total",[114,1874,183],{"class":133},[114,1876,1078],{"class":137},[114,1878,1879],{"class":186},"reduce",[114,1881,920],{"class":137},[114,1883,1884],{"class":307},"sum",[114,1886,1887],{"class":137},", { ",[114,1889,1128],{"class":307},[114,1891,1590],{"class":137},[114,1893,697],{"class":133},[114,1895,1896],{"class":137}," sum ",[114,1898,378],{"class":133},[114,1900,1901],{"class":137}," (stats.indexes[uid]?.numberOfDocuments ",[114,1903,633],{"class":133},[114,1905,998],{"class":141},[114,1907,1908],{"class":137},"), ",[114,1910,1911],{"class":141},"0",[114,1913,202],{"class":137},[114,1915,1917,1919,1921,1923,1925,1928,1930,1932,1935,1937,1940],{"class":116,"line":1916},101,[114,1918,251],{"class":137},[114,1920,1758],{"class":186},[114,1922,257],{"class":137},[114,1924,569],{"class":260},[114,1926,1927],{"class":137},"indexes",[114,1929,60],{"class":260},[114,1931,1068],{"class":141},[114,1933,1934],{"class":260},"} indexes, ${",[114,1936,1777],{"class":137},[114,1938,1939],{"class":260},"} documents to copy`",[114,1941,202],{"class":137},[114,1943,1945],{"class":116,"line":1944},102,[114,1946,209],{"emptyLinePlaceholder":208},[114,1948,1950,1952,1954,1956,1958,1960,1962,1965,1967,1969],{"class":116,"line":1949},103,[114,1951,778],{"class":133},[114,1953,218],{"class":137},[114,1955,134],{"class":133},[114,1957,138],{"class":137},[114,1959,1128],{"class":141},[114,1961,145],{"class":137},[114,1963,1964],{"class":141},"primaryKey",[114,1966,166],{"class":137},[114,1968,1203],{"class":133},[114,1970,1971],{"class":137}," indexes) {\n",[114,1973,1975,1977,1979,1981,1984,1986,1988],{"class":116,"line":1974},104,[114,1976,1755],{"class":137},[114,1978,1758],{"class":186},[114,1980,257],{"class":137},[114,1982,1983],{"class":260},"`→ ${",[114,1985,1128],{"class":137},[114,1987,401],{"class":260},[114,1989,202],{"class":137},[114,1991,1993,1996],{"class":116,"line":1992},105,[114,1994,1995],{"class":133},"    try",[114,1997,1308],{"class":137},[114,1999,2001,2004,2006,2008,2010,2012,2014,2016,2018],{"class":116,"line":2000},106,[114,2002,2003],{"class":133},"      await",[114,2005,718],{"class":186},[114,2007,257],{"class":137},[114,2009,800],{"class":260},[114,2011,145],{"class":137},[114,2013,1153],{"class":260},[114,2015,1128],{"class":137},[114,2017,401],{"class":260},[114,2019,202],{"class":137},[114,2021,2023,2025,2027],{"class":116,"line":2022},107,[114,2024,1302],{"class":137},[114,2026,525],{"class":133},[114,2028,2029],{"class":137}," (error) {\n",[114,2031,2033,2036,2039,2041,2044,2046,2049],{"class":116,"line":2032},108,[114,2034,2035],{"class":133},"      if",[114,2037,2038],{"class":137}," (error.status ",[114,2040,1266],{"class":133},[114,2042,2043],{"class":141}," 404",[114,2045,375],{"class":137},[114,2047,2048],{"class":133},"throw",[114,2050,645],{"class":137},[114,2052,2054,2056,2058,2060,2062,2064,2066,2068,2070,2073,2076,2078,2081,2083,2086,2088],{"class":116,"line":2053},109,[114,2055,2003],{"class":133},[114,2057,763],{"class":186},[114,2059,257],{"class":137},[114,2061,1366],{"class":133},[114,2063,718],{"class":186},[114,2065,257],{"class":137},[114,2067,1464],{"class":260},[114,2069,145],{"class":137},[114,2071,2072],{"class":260},"'/indexes'",[114,2074,2075],{"class":137},", { uid, ",[114,2077,1054],{"class":133},[114,2079,2080],{"class":137},"(primaryKey ",[114,2082,504],{"class":133},[114,2084,2085],{"class":137}," { primaryKey } ",[114,2087,517],{"class":133},[114,2089,2090],{"class":137}," {}) }))\n",[114,2092,2094],{"class":116,"line":2093},110,[114,2095,906],{"class":137},[114,2097,2099,2101,2103,2105,2107,2109],{"class":116,"line":2098},111,[114,2100,553],{"class":133},[114,2102,1168],{"class":141},[114,2104,183],{"class":133},[114,2106,344],{"class":133},[114,2108,1123],{"class":186},[114,2110,2111],{"class":137},"(uid)\n",[114,2113,2115,2117,2119],{"class":116,"line":2114},112,[114,2116,912],{"class":133},[114,2118,1412],{"class":186},[114,2120,2121],{"class":137},"(uid, userProvided)\n",[114,2123,2125],{"class":116,"line":2124},113,[114,2126,651],{"class":137},[114,2128,2130],{"class":116,"line":2129},114,[114,2131,209],{"emptyLinePlaceholder":208},[114,2133,2135,2137,2139,2141,2144],{"class":116,"line":2134},115,[114,2136,251],{"class":137},[114,2138,1758],{"class":186},[114,2140,257],{"class":137},[114,2142,2143],{"class":260},"'Done.'",[114,2145,202],{"class":137},[114,2147,2149],{"class":116,"line":2148},116,[114,2150,285],{"class":137},[114,2152,2154],{"class":116,"line":2153},117,[114,2155,209],{"emptyLinePlaceholder":208},[114,2157,2159,2162,2165,2167,2169,2171,2173,2175],{"class":116,"line":2158},118,[114,2160,2161],{"class":186},"main",[114,2163,2164],{"class":137},"().",[114,2166,525],{"class":186},[114,2168,920],{"class":137},[114,2170,254],{"class":307},[114,2172,375],{"class":137},[114,2174,697],{"class":133},[114,2176,1308],{"class":137},[114,2178,2180,2182,2184],{"class":116,"line":2179},119,[114,2181,251],{"class":137},[114,2183,254],{"class":186},[114,2185,2186],{"class":137},"(error.message)\n",[114,2188,2190,2192,2195,2197,2200],{"class":116,"line":2189},120,[114,2191,540],{"class":133},[114,2193,2194],{"class":137}," (error.code ",[114,2196,424],{"class":133},[114,2198,2199],{"class":260}," 'document_quota_exceeded'",[114,2201,245],{"class":137},[114,2203,2205,2207,2209,2211,2214,2217,2220],{"class":116,"line":2204},121,[114,2206,1755],{"class":137},[114,2208,254],{"class":186},[114,2210,257],{"class":137},[114,2212,2213],{"class":260},"'Your plan",[114,2215,2216],{"class":141},"\\'",[114,2218,2219],{"class":260},"s document limit is reached. Move to a larger plan and re-run.'",[114,2221,202],{"class":137},[114,2223,2225],{"class":116,"line":2224},122,[114,2226,651],{"class":137},[114,2228,2230,2232,2234,2236,2238],{"class":116,"line":2229},123,[114,2231,269],{"class":137},[114,2233,272],{"class":186},[114,2235,257],{"class":137},[114,2237,277],{"class":141},[114,2239,202],{"class":137},[114,2241,2243],{"class":116,"line":2242},124,[114,2244,2245],{"class":137},"})\n",[14,2247,2248],{},"Run it with both sets of credentials:",[103,2250,2254],{"className":2251,"code":2252,"language":2253,"meta":109,"style":109},"language-bash shiki shiki-themes github-light github-dark","SOURCE_URL=https://your-old-meilisearch \\\nSOURCE_KEY=your-source-key \\\nTARGET_URL=https://your-celersearch-endpoint \\\nTARGET_KEY=your-celersearch-api-key \\\nnode migrate.mjs\n","bash",[111,2255,2256,2268,2276,2283,2290],{"__ignoreMap":109},[114,2257,2258,2260,2262,2265],{"class":116,"line":117},[114,2259,142],{"class":137},[114,2261,169],{"class":133},[114,2263,2264],{"class":260},"https://your-old-meilisearch",[114,2266,2267],{"class":186}," \\\n",[114,2269,2270,2273],{"class":116,"line":124},[114,2271,2272],{"class":137},"SOURCE_KEY=your-source-key ",[114,2274,2275],{"class":141},"\\\n",[114,2277,2278,2281],{"class":116,"line":130},[114,2279,2280],{"class":137},"TARGET_URL=https://your-celersearch-endpoint ",[114,2282,2275],{"class":141},[114,2284,2285,2288],{"class":116,"line":175},[114,2286,2287],{"class":137},"TARGET_KEY=your-celersearch-api-key ",[114,2289,2275],{"class":141},[114,2291,2292,2295],{"class":116,"line":205},[114,2293,2294],{"class":137},"node ",[114,2296,2297],{"class":260},"migrate.mjs\n",[14,2299,2300,2301,2303,2304,2307],{},"Each index is created with its primary key, its settings are applied, and its\ndocuments are copied in batches of 1,000 (set ",[111,2302,193],{}," to change that). The\nscript waits for every task, so when it prints ",[111,2305,2306],{},"Done."," your data is\nsearchable.",[14,2309,2310,2311,2315],{},"If the target rejects a setting, for example one that depends on an\nexperimental feature you enabled on the source, the script stops and prints\nMeilisearch's error message. ",[34,2312,2314],{"href":2313},"/contact","Contact us"," and we'll help you sort it\nout before you re-run.",[18,2317,2319],{"id":2318},"ai-indexes","AI indexes",[67,2321,2322,2331,2337],{},[26,2323,2324,2327,2328,2330],{},[29,2325,2326],{},"Embedder API keys are hidden."," Meilisearch only returns them partially, so\nthe script can't copy them. Set ",[111,2329,163],{}," to your embedding\nprovider's key (for example your OpenAI key) and the script uses it for every\nembedder that needs one. Without it, those embedders are skipped with a\nwarning, and you can add them to the index settings later.",[26,2332,2333,2336],{},[29,2334,2335],{},"Documents are re-embedded."," Generated vectors aren't copied. The target\nembeds each document as it arrives, which takes longer than a keyword index\nand is billed by your embedding provider.",[26,2338,2339,2342,2343,2345],{},[29,2340,2341],{},"User-provided vectors are copied."," If an embedder uses ",[111,2344,1421],{},", its\nvectors travel with the documents.",[18,2347,2349],{"id":2348},"what-isnt-copied","What isn't copied",[67,2351,2352,2360,2365],{},[26,2353,2354,2357,2358],{},[29,2355,2356],{},"API keys",": use the instance API key; see\n",[34,2359,88],{"href":87},[26,2361,2362],{},[29,2363,2364],{},"Task history and chat workspace settings",[26,2366,2367,2370,2371],{},[29,2368,2369],{},"Snapshots and dumps",": your new instance is covered by encrypted\n",[34,2372,2374],{"href":2373},"/docs/cloud/backups","backups",[18,2376,2378],{"id":2377},"switch-your-app-over","Switch your app over",[23,2380,2381,2384,2387,2398],{},[26,2382,2383],{},"Run the script and check document counts and a few searches on the new instance.",[26,2385,2386],{},"If your source kept receiving writes, re-run the script to catch up.",[26,2388,2389,2390,2393,2394,2397],{},"Replace the URL and key in your app's configuration with the CelerSearch\n",[29,2391,2392],{},"Endpoint URL"," and ",[29,2395,2396],{},"API key",", then deploy.",[26,2399,2400],{},"Keep the old instance until you're confident, then shut it down.",[2402,2403,2405],"tip",{"title":2404},"Large migrations",[14,2406,2407,2408,2410],{},"Moving millions of documents, or AI indexes that take a long time to embed?\n",[34,2409,2314],{"href":2313}," before you start and we'll help you plan it.",[2412,2413,2414],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":109,"searchDepth":124,"depth":124,"links":2416},[2417,2418,2419,2420,2421],{"id":20,"depth":124,"text":21},{"id":97,"depth":124,"text":98},{"id":2318,"depth":124,"text":2319},{"id":2348,"depth":124,"text":2349},{"id":2377,"depth":124,"text":2378},"Move your indexes from Meilisearch Cloud or a self-hosted Meilisearch to a CelerSearch instance with one script. It copies every index with its settings and documents, then you point your app at the new endpoint.","md",{},"/docs/cloud/migrate",{"title":5,"description":2422},"Copy every index, setting and document from Meilisearch Cloud or a self-hosted Meilisearch to managed CelerSearch with one script, then switch your app's endpoint.","Migrate from Meilisearch Cloud or Self-Hosted",{"loc":2425},"docs/cloud/migrate","j2BfNBm-WZ09X2TuzHyrezDVB28hXy73ncNQCi6EiUs",1792316274324]