[{"data":1,"prerenderedAt":1823},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Fautocomplete\u002Fsuggestions":331,"docs-\u002Fdocs\u002Fautocomplete\u002Fsuggestions-surround":1820},[4],{"title":5,"path":6,"stem":7,"children":8,"page":46},"Docs","\u002Fdocs","docs",[9,47,72,90,132,198,241,252,276,301],{"title":10,"description":11,"icon":12,"path":13,"stem":14,"children":15,"page":46},"Getting started","What Zaproo Search is, a quickstart, and wiring search into a storefront.","i-lucide-rocket","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[16,22,28,34,40],{"title":17,"path":18,"stem":19,"description":20,"icon":21},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F1.introduction","What Zaproo Search is, the five things you work with, and how a product catalog becomes a search box on your shop.","i-lucide-book-open-text",{"title":23,"path":24,"stem":25,"description":26,"icon":27},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F1.getting-started\u002F2.quickstart","Set up search for your shop in the cabinet, from a new account to a first search, with the API and MCP as other ways to do the same.","i-lucide-zap",{"title":29,"path":30,"stem":31,"description":32,"icon":33},"Integrate a storefront","\u002Fdocs\u002Fgetting-started\u002Fstorefront","docs\u002F1.getting-started\u002F3.storefront","Build a search results page with facets and an autocomplete box on top of the search and suggest routes.","i-lucide-store",{"title":35,"path":36,"stem":37,"description":38,"icon":39},"JavaScript SDK","\u002Fdocs\u002Fgetting-started\u002Fjavascript-sdk","docs\u002F1.getting-started\u002F4.javascript-sdk","Search, autocomplete and event tracking from a storefront with one small client that runs in the browser, on your server and in edge functions.","i-lucide-braces",{"title":41,"path":42,"stem":43,"description":44,"icon":45},"AI shopping assistant","\u002Fdocs\u002Fgetting-started\u002Fai-assistant","docs\u002F1.getting-started\u002F5.ai-assistant","A chat widget for your storefront that finds products and answers questions from your indexes.","i-lucide-sparkles",false,{"title":48,"description":49,"icon":50,"path":51,"stem":52,"children":53,"page":46},"Account and team","Sign-in, sessions, organizations, members, roles and projects.","i-lucide-users","\u002Fdocs\u002Faccount","docs\u002F2.account",[54,60,66],{"title":55,"path":56,"stem":57,"description":58,"icon":59},"Account and sign-in","\u002Fdocs\u002Faccount\u002Fsign-in","docs\u002F2.account\u002F1.sign-in","Create an account, verify your email, stay signed in, manage signed-in devices and change or reset your password.","i-lucide-log-in",{"title":61,"path":62,"stem":63,"description":64,"icon":65},"Organizations, members and roles","\u002Fdocs\u002Faccount\u002Forganizations","docs\u002F2.account\u002F2.organizations","What an organization holds, how to add members, and what owners, admins and members may do.","i-lucide-building-2",{"title":67,"path":68,"stem":69,"description":70,"icon":71},"Projects","\u002Fdocs\u002Faccount\u002Fprojects","docs\u002F2.account\u002F3.projects","Group the indices and API keys of one shop or one environment, and keep staging apart from production.","i-lucide-folder-kanban",{"title":73,"description":74,"icon":75,"path":76,"stem":77,"children":78,"page":46},"API keys and security","Secret and public keys, scopes, allowed origins, rate limits and errors.","i-lucide-key-round","\u002Fdocs\u002Fkeys","docs\u002F3.keys",[79,84],{"title":80,"path":81,"stem":82,"description":83,"icon":75},"API keys","\u002Fdocs\u002Fkeys\u002Fapi-keys","docs\u002F3.keys\u002F1.api-keys","Secret and public keys, full and read access, index scope, allowed origins, expiry, and how to revoke a key.",{"title":85,"path":86,"stem":87,"description":88,"icon":89},"Rate limits and errors","\u002Fdocs\u002Fkeys\u002Frate-limits","docs\u002F3.keys\u002F2.rate-limits","How many requests each route accepts per minute, what a 429 looks like, the error format and every error code with its HTTP status.","i-lucide-gauge",{"title":91,"description":92,"icon":93,"path":94,"stem":95,"children":96,"page":46},"Indexing","Indices, languages, mappings, documents, tasks, full catalog sync and reindexing.","i-lucide-database","\u002Fdocs\u002Findexing","docs\u002F4.indexing",[97,102,108,114,120,126],{"title":98,"path":99,"stem":100,"description":101,"icon":93},"Indices and languages","\u002Fdocs\u002Findexing\u002Findices","docs\u002F4.indexing\u002F1.indices","Create an index, pick its language, read its status, and change the language later with a reindex.",{"title":103,"path":104,"stem":105,"description":106,"icon":107},"Mapping and fields","\u002Fdocs\u002Findexing\u002Fmapping","docs\u002F4.indexing\u002F2.mapping","Field types, the five flags that decide what a field is used for, text analysis options, unmapped fields, and which changes need a reindex.","i-lucide-table-properties",{"title":109,"path":110,"stem":111,"description":112,"icon":113},"Documents and tasks","\u002Fdocs\u002Findexing\u002Fdocuments","docs\u002F4.indexing\u002F3.documents","Upload, browse and delete documents in the cabinet or through the API, follow each write as a task, and retry safely with Idempotency-Key.","i-lucide-file-json",{"title":115,"path":116,"stem":117,"description":118,"icon":119},"Full catalog sync","\u002Fdocs\u002Findexing\u002Ffull-sync","docs\u002F4.indexing\u002F4.full-sync","Replace the whole catalog with a replace session, so products missing from your export disappear from search, without downtime.","i-lucide-refresh-cw",{"title":121,"path":122,"stem":123,"description":124,"icon":125},"Reindex and versions","\u002Fdocs\u002Findexing\u002Fversions","docs\u002F4.indexing\u002F5.versions","Rebuild an index with its saved mapping and swap it in without downtime, follow or cancel the rebuild, and read activeVersion and buildingVersion.","i-lucide-git-compare-arrows",{"title":127,"path":128,"stem":129,"description":130,"icon":131},"Data source","\u002Fdocs\u002Findexing\u002Fdata-source","docs\u002F4.indexing\u002F6.data-source","Let Zaproo download your product feed on a schedule, map it to documents, write only what changed and delete what left the feed.","i-lucide-rss",{"title":133,"description":134,"icon":135,"path":136,"stem":137,"children":138,"page":46},"Integrations","Connect your shop. Magento 2, product feeds and the API work today; more platforms are coming.","i-lucide-plug-zap","\u002Fdocs\u002Fintegrations","docs\u002F4.integrations",[139,145,151,156,162,168,173,178,183,188,193],{"title":140,"path":141,"stem":142,"description":143,"icon":144},"Integrations overview","\u002Fdocs\u002Fintegrations\u002Foverview","docs\u002F4.integrations\u002F01.overview","The ways to get your catalog into Zaproo Search, which one to pick, and how a connected shop shows up in the cabinet.","i-lucide-layout-grid",{"title":146,"path":147,"stem":148,"description":149,"icon":150},"Magento 2","\u002Fdocs\u002Fintegrations\u002Fmagento","docs\u002F4.integrations\u002F02.magento","Install the Zaproo Search module for Magento 2, connect each store view to its own index, and keep the catalog in sync.","i-lucide-shopping-cart",{"title":152,"path":153,"stem":154,"description":155,"icon":131},"Product feed","\u002Fdocs\u002Fintegrations\u002Fproduct-feed","docs\u002F4.integrations\u002F03.product-feed","Connect any shop that can publish its catalog as a feed. You set it up in the cabinet, and Zaproo downloads the feed on a schedule and writes only what changed.",{"title":157,"path":158,"stem":159,"description":160,"icon":161},"REST API and MCP","\u002Fdocs\u002Fintegrations\u002Frest-api-and-mcp","docs\u002F4.integrations\u002F04.rest-api-and-mcp","Send documents from your own code with the REST API, or let an AI agent manage the index over MCP.","i-lucide-code",{"title":163,"path":164,"stem":165,"description":166,"icon":167},"Shopify","\u002Fdocs\u002Fintegrations\u002Fshopify","docs\u002F4.integrations\u002F05.shopify","A Zaproo Search integration for Shopify is coming soon. Until then, connect the shop through a product feed or the REST API.","i-lucide-shopping-bag",{"title":169,"path":170,"stem":171,"description":172,"icon":167},"WooCommerce","\u002Fdocs\u002Fintegrations\u002Fwoocommerce","docs\u002F4.integrations\u002F06.woocommerce","A Zaproo Search integration for WooCommerce is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":174,"path":175,"stem":176,"description":177,"icon":167},"Shopware","\u002Fdocs\u002Fintegrations\u002Fshopware","docs\u002F4.integrations\u002F07.shopware","A Zaproo Search integration for Shopware is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":179,"path":180,"stem":181,"description":182,"icon":167},"BigCommerce","\u002Fdocs\u002Fintegrations\u002Fbigcommerce","docs\u002F4.integrations\u002F08.bigcommerce","A Zaproo Search integration for BigCommerce is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":184,"path":185,"stem":186,"description":187,"icon":167},"PrestaShop","\u002Fdocs\u002Fintegrations\u002Fprestashop","docs\u002F4.integrations\u002F09.prestashop","A Zaproo Search integration for PrestaShop is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":189,"path":190,"stem":191,"description":192,"icon":167},"commercetools","\u002Fdocs\u002Fintegrations\u002Fcommercetools","docs\u002F4.integrations\u002F10.commercetools","A Zaproo Search integration for commercetools is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":194,"path":195,"stem":196,"description":197,"icon":167},"Salesforce Commerce Cloud","\u002Fdocs\u002Fintegrations\u002Fsalesforce-commerce-cloud","docs\u002F4.integrations\u002F11.salesforce-commerce-cloud","A Zaproo Search integration for Salesforce Commerce Cloud is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":199,"description":200,"icon":201,"path":202,"stem":203,"children":204,"page":46},"Search and relevance","The search API, search profiles, facets, synonyms and ranking rules.","i-lucide-search","\u002Fdocs\u002Fsearch","docs\u002F5.search",[205,211,217,223,229,235],{"title":206,"path":207,"stem":208,"description":209,"icon":210},"Search API","\u002Fdocs\u002Fsearch\u002Fsearch-api","docs\u002F5.search\u002F1.search-api","Try a search in the playground, then the search request and response for developers, with every filter form, sorting, paging, highlighting and the inline profile.","i-lucide-search-code",{"title":212,"path":213,"stem":214,"description":215,"icon":216},"Search profiles","\u002Fdocs\u002Fsearch\u002Fprofiles","docs\u002F5.search\u002F2.profiles","Every setting of a search profile, what it does to results, and the mistakes to avoid.","i-lucide-sliders-horizontal",{"title":218,"path":219,"stem":220,"description":221,"icon":222},"Facets","\u002Fdocs\u002Fsearch\u002Ffacets","docs\u002F5.search\u002F3.facets","The filter panels next to the results, the four facet types, index facets and profile facets, and how a shopper's clicks change the counts.","i-lucide-list-filter",{"title":224,"path":225,"stem":226,"description":227,"icon":228},"Synonyms","\u002Fdocs\u002Fsearch\u002Fsynonyms","docs\u002F5.search\u002F4.synonyms","Let different words find the same products, with equivalent and one-way rules, bulk import and export in the Solr format, and no reindex.","i-lucide-arrow-left-right",{"title":230,"path":231,"stem":232,"description":233,"icon":234},"Ranking rules","\u002Fdocs\u002Fsearch\u002Frules","docs\u002F5.search\u002F5.rules","Change the results for chosen searches. Put products first, hide them, lift or lower a brand, narrow the results or weigh fields differently, on a schedule and per profile.","i-lucide-list-ordered",{"title":236,"path":237,"stem":238,"description":239,"icon":240},"Language groups","\u002Fdocs\u002Fsearch\u002Flanguage-groups","docs\u002F5.search\u002F6.language-groups","Let each store of a multilingual shop find its products by the other stores' text, so an English search on the Estonian store still finds the Estonian product.","i-lucide-languages",{"title":242,"description":243,"icon":244,"path":245,"stem":246,"children":247,"page":46},"Autocomplete","Query suggestions as the shopper types.","i-lucide-text-cursor-input","\u002Fdocs\u002Fautocomplete","docs\u002F6.autocomplete",[248],{"title":242,"path":249,"stem":250,"description":251,"icon":244},"\u002Fdocs\u002Fautocomplete\u002Fsuggestions","docs\u002F6.autocomplete\u002F1.suggestions","Set up query suggestions in the cabinet. They are built every hour from your shoppers' searches, field values and custom entries.",{"title":253,"description":254,"icon":255,"path":256,"stem":257,"children":258,"page":46},"Analytics","Searches, zero-result queries and latency.","i-lucide-chart-line","\u002Fdocs\u002Fanalytics","docs\u002F7.analytics",[259,264,270],{"title":260,"path":261,"stem":262,"description":263,"icon":255},"Search analytics","\u002Fdocs\u002Fanalytics\u002Fsearch-analytics","docs\u002F7.analytics\u002F1.search-analytics","What the analytics page counts, which traffic it leaves out, how the headline numbers are defined, how comparisons and retention work, and how to get the weekly digest.",{"title":265,"path":266,"stem":267,"description":268,"icon":269},"Reports","\u002Fdocs\u002Fanalytics\u002Freports","docs\u002F7.analytics\u002F2.reports","Every analytics report with the definition of each column, the opportunities list and its fix buttons, the per-query view with before and after, and the CSV download.","i-lucide-table",{"title":271,"path":272,"stem":273,"description":274,"icon":275},"Event tracking","\u002Fdocs\u002Fanalytics\u002Fevent-tracking","docs\u002F7.analytics\u002F3.event-tracking","Send clicks, add-to-cart, purchases and suggestion clicks from your storefront, tie them to the search with searchId, and a copy-paste script that does it.","i-lucide-mouse-pointer-click",{"title":277,"description":278,"icon":279,"path":280,"stem":281,"children":282,"page":46},"AI agents (MCP)","Connect Claude Code or any MCP client and manage search from an agent.","i-lucide-bot","\u002Fdocs\u002Fmcp","docs\u002F8.mcp",[283,289,295],{"title":284,"path":285,"stem":286,"description":287,"icon":288},"MCP setup","\u002Fdocs\u002Fmcp\u002Fsetup","docs\u002F8.mcp\u002F1.setup","Connect Claude Code or another MCP client to your project from the cabinet's MCP connection page, and let an agent manage indices, documents, profiles, synonyms and rules.","i-lucide-plug",{"title":290,"path":291,"stem":292,"description":293,"icon":294},"MCP tools","\u002Fdocs\u002Fmcp\u002Ftools","docs\u002F8.mcp\u002F2.tools","Every tool the Zaproo Search MCP server offers, what an agent can do with each group, and prompts to start from.","i-lucide-wrench",{"title":296,"path":297,"stem":298,"description":299,"icon":300},"Resources and prompts","\u002Fdocs\u002Fmcp\u002Fresources","docs\u002F8.mcp\u002F3.resources","The index resources an MCP client can read, the tune_relevance prompt, and the errors the MCP server answers.","i-lucide-library",{"title":302,"description":303,"icon":304,"path":305,"stem":306,"children":307,"page":46},"Reference","Every REST route, every limit, plans and billing, and status.","i-lucide-book-open","\u002Fdocs\u002Freference","docs\u002F9.reference",[308,314,319,325],{"title":309,"path":310,"stem":311,"description":312,"icon":313},"REST API","\u002Fdocs\u002Freference\u002Frest-api","docs\u002F9.reference\u002F1.rest-api","The routes of the Zaproo Search REST API, grouped by area, with who may call it.","i-lucide-list-tree",{"title":315,"path":316,"stem":317,"description":318,"icon":89},"Limits","\u002Fdocs\u002Freference\u002Flimits","docs\u002F9.reference\u002F2.limits","Every size limit, cap and default of the Zaproo Search API in one place, with what happens when you reach it.",{"title":320,"path":321,"stem":322,"description":323,"icon":324},"Plans and billing","\u002Fdocs\u002Freference\u002Fbilling","docs\u002F9.reference\u002F3.billing","Check your plan and usage on the Billing & usage page, change the plan, download invoices, and see how quotas and proration work.","i-lucide-credit-card",{"title":326,"path":327,"stem":328,"description":329,"icon":330},"Status","\u002Fdocs\u002Freference\u002Fstatus","docs\u002F9.reference\u002F4.status","The status page and the status route, what each service covers and how to use them in your own monitoring.","i-lucide-activity",{"id":332,"title":242,"body":333,"description":251,"extension":1815,"meta":1816,"navigation":1817,"path":249,"seo":1818,"stem":250,"__hash__":1819},"docs\u002Fdocs\u002F6.autocomplete\u002F1.suggestions.md",{"type":334,"value":335,"toc":1784},"minimark",[336,341,350,363,366,373,381,384,425,437,440,458,468,480,484,521,525,528,541,544,550,618,633,636,644,648,667,703,725,770,780,783,788,809,865,890,924,950,953,956,965,1014,1017,1021,1026,1028,1032,1085,1114,1121,1123,1130,1181,1184,1188,1194,1197,1200,1212,1316,1320,1329,1333,1402,1581,1592,1598,1601,1612,1616,1691,1694,1697,1741,1745,1780],[337,338,340],"h2",{"id":339},"what-autocomplete-does","What autocomplete does",[342,343,344,345,349],"p",{},"As the shopper types, the search box asks Zaproo for completions: \"ta\" answers \"tape\", \"duct tape\", \"office tape\". Each ",[346,347,348],"a",{"href":99},"index"," has its own suggestion index, built from three sources:",[351,352,353,357,360],"ul",{},[354,355,356],"li",{},"Popular searches: queries that shoppers searched on your store and that found products.",[354,358,359],{},"Field values of the fields you choose, such as every brand.",[354,361,362],{},"Custom suggestions you add by hand, such as a campaign name.",[342,364,365],{},"Suggestions only ever come from that suggestion index, so a suggest request stays fast and never touches your products. The suggestion index is rebuilt every hour.",[342,367,368,369,372],{},"To set it up, open an index and click ",[370,371,242],"strong",{}," in the menu. Only organization owners and admins can change the settings; other members see them read-only.",[342,374,375],{},[376,377],"img",{"alt":378,"src":379,"title":380},"The Autocomplete page of the products index: the Try it panel with the query ta and three popular searches with their categories, then the suggest key and the Rebuild now button","\u002Fdocs\u002Fscreenshots\u002Fautocomplete.png","The Try it panel shows what the search box suggests now",[342,382,383],{},"The page has these parts, in this order:",[385,386,387,393,407,413,419],"ol",{},[354,388,389,392],{},[370,390,391],{},"Try it",": what the search box suggests right now.",[354,394,395,398,399,402,403,406],{},[370,396,397],{},"Suggest key"," and ",[370,400,401],{},"Suggestion index",", with the ",[370,404,405],{},"Rebuild now"," button.",[354,408,409,412],{},[370,410,411],{},"Where suggestions come from",": the settings that shape the build.",[354,414,415,418],{},[370,416,417],{},"How suggestions behave",": the settings that shape each answer.",[354,420,421,424],{},[370,422,423],{},"Custom suggestions",": the texts you add yourself.",[342,426,427,428,430,431,433,434,436],{},"Settings under ",[370,429,411],{}," apply with the next build, so click ",[370,432,405],{}," after you save them. Settings under ",[370,435,417],{}," apply to the very next request.",[337,438,391],{"id":439},"try-it",[342,441,442,443,445,446,449,450,453,454,457],{},"Type in the ",[370,444,391],{}," box as a shopper would. The list shows each suggestion with its source (",[370,447,448],{},"Popular search",", ",[370,451,452],{},"Field value"," or ",[370,455,456],{},"Custom",") and, under it, the category it points at, for example \"in Tapes>Duct tapes\". Leave the box empty to see what a shopper gets on clicking into the search box.",[342,459,460,461,464,465,467],{},"The panel always uses the saved settings. While you have unsaved changes it says so: click ",[370,462,463],{},"Save settings"," first, and click ",[370,466,405],{}," when the change concerns the sources.",[342,469,470,471,474,475,479],{},"If the list says ",[370,472,473],{},"No suggestions",", the suggestion index has not been built since the last change, or none of the sources holds anything yet. See ",[346,476,478],{"href":477},"#common-mistakes","Common mistakes",".",[337,481,483],{"id":482},"suggest-key-and-suggestion-index","Suggest key and suggestion index",[485,486,490,494,508],"setting",{"name":487,"type":488,"values":489},"suggestKey","string","16 URL-safe characters, read-only",[491,492,397],"h3",{"id":493},"suggest-key",[342,495,496,497,501,502,504,505,507],{},"The public handle of the index's suggestions. Your search box puts it in the ",[346,498,500],{"href":499},"#the-suggest-request","suggest URL",". It is created with the index's autocomplete settings and never changes. Copy it from ",[370,503,397],{}," at the top of the ",[370,506,242],{}," page.",[509,510,512],"template",{"v-slot:tips":511},"",[351,513,514],{},[354,515,516,517,520],{},"The suggest key is not a secret and is no credential. The request still needs an ",[346,518,519],{"href":81},"API key"," of the same project.",[491,522,524],{"id":523},"rebuilding","Rebuilding",[342,526,527],{},"A worker rebuilds the suggestion index of every index that has autocomplete settings once an hour. It reads the popular searches of the lookback window, the values of the chosen fields and the custom suggestions, writes a new suggestion index and swaps it in, so suggest keeps answering during the build. Queries that are a misspelling of a far more popular one (\"tpae\" next to \"tape\") are dropped.",[342,529,530,531,533,534,537,538,540],{},"Click ",[370,532,405],{}," to see a change at once, for example after you add custom suggestions, change the field list or upload a new catalog. The button starts a task. While it runs, the line next to it shows ",[370,535,536],{},"Rebuild"," with the task status, and when it is done, how many suggestions the new index holds. The ",[370,539,391],{}," panel then refreshes by itself.",[342,542,543],{},"With the API, start a rebuild like this:",[545,546],"api-route",{"auth":547,"method":548,"path":549},"Project admin or a full-access secret key","POST","\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Fsuggestions\u002Frebuild",[551,552,556],"pre",{"className":553,"code":554,"language":555,"meta":511,"style":511},"language-bash shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","curl -X POST https:\u002F\u002Fapi.search.zaproo.cloud\u002Fv1\u002Fprojects\u002F$PROJECT_ID\u002Findices\u002F$INDEX_ID\u002Fsuggestions\u002Frebuild \\\n  -H \"Authorization: Bearer $ZS_KEY\"\n# 202 {\"taskId\": \"...\"}\n","bash",[557,558,559,596,611],"code",{"__ignoreMap":511},[560,561,564,568,572,576,579,583,586,589,592],"span",{"class":562,"line":563},"line",1,[560,565,567],{"class":566},"szw1H","curl",[560,569,571],{"class":570},"ssYy9"," -X",[560,573,575],{"class":574},"semJd"," POST",[560,577,578],{"class":574}," https:\u002F\u002Fapi.search.zaproo.cloud\u002Fv1\u002Fprojects\u002F",[560,580,582],{"class":581},"s7iLA","$PROJECT_ID",[560,584,585],{"class":574},"\u002Findices\u002F",[560,587,588],{"class":581},"$INDEX_ID",[560,590,591],{"class":574},"\u002Fsuggestions\u002Frebuild",[560,593,595],{"class":594},"sklAV"," \\\n",[560,597,599,602,605,608],{"class":562,"line":598},2,[560,600,601],{"class":570},"  -H",[560,603,604],{"class":574}," \"Authorization: Bearer ",[560,606,607],{"class":581},"$ZS_KEY",[560,609,610],{"class":574},"\"\n",[560,612,614],{"class":562,"line":613},3,[560,615,617],{"class":616},"sq92B","# 202 {\"taskId\": \"...\"}\n",[342,619,620,621,624,625,629,630,479],{},"Poll ",[557,622,623],{},"GET \u002Fv1\u002Fprojects\u002F:projectId\u002Ftasks\u002F:taskId"," like any other ",[346,626,628],{"href":627},"\u002Fdocs\u002Findexing\u002Fdocuments#task-status","task",". The hourly schedule skips an index whose build is already queued or running. Over MCP, the agent calls ",[557,631,632],{},"rebuild_suggestions",[337,634,411],{"id":635},"where-suggestions-come-from",[342,637,638,639,641,642,479],{},"Three sources are merged. When two of them hold the same text, a custom suggestion wins, then a popular search, then a field value. Change the settings below, click ",[370,640,463],{}," at the bottom of the form, then ",[370,643,405],{},[491,645,647],{"id":646},"popular-searches","Popular searches",[342,649,650,651,654,655,658,659,662,663,479],{},"Queries your shoppers searched that found products. Two settings decide which queries qualify: ",[370,652,653],{},"Searched by at least"," some number of visitors, ",[370,656,657],{},"In the last"," some number of days. Only shopper traffic counts: searches from the cabinet, from MCP, from excluded IP addresses, from crawlers and with ",[557,660,661],{},"analytics: false"," are left out. See ",[346,664,666],{"href":665},"\u002Fdocs\u002Fanalytics\u002Fsearch-analytics#what-counts-as-real-traffic","What counts as real traffic",[485,668,673,677,690],{"name":669,"type":670,"default":671,"values":672},"minQueryCount","integer","2","1 to 1000",[491,674,676],{"id":675},"minimum-searches-to-qualify","Minimum searches to qualify",[342,678,679,680,682,683,686,687,689],{},"How many different visitors must have searched a query, with results, before it becomes a suggestion. In the cabinet: ",[370,681,653],{}," ... visitors. Each distinct ",[557,684,685],{},"sessionId"," sent with search counts once; searches without a ",[557,688,685],{}," count one each.",[509,691,692],{"v-slot:tips":511},[351,693,694,700],{},[354,695,696,697,699],{},"Send a stable ",[557,698,685],{}," with every search from the storefront. Then one shopper who repeats a phrase cannot turn it into a public suggestion.",[354,701,702],{},"Raise it on a busy store to keep rare or odd queries out. On a new store, 1 or 2 fills the list sooner.",[485,704,708,712,718],{"name":705,"type":670,"default":706,"values":707},"lookbackDays","30","1 to 90",[491,709,711],{"id":710},"lookback","Lookback",[342,713,714,715,717],{},"How many days of searches the build reads, 1 to 90. In the cabinet: ",[370,716,657],{}," ... days.",[509,719,720],{"v-slot:tips":511},[351,721,722],{},[354,723,724],{},"30 days follows seasons and trends. A longer window keeps steady sellers but lets last season's queries linger.",[485,726,731,735,756],{"name":727,"type":728,"default":729,"values":730},"fields","field names","[]","up to 10 keyword fields",[491,732,734],{"id":733},"field-values","Field values",[342,736,737,738,453,741,744,745,747,748,751,752,755],{},"Fields whose values become suggestions, such as ",[557,739,740],{},"brand",[557,742,743],{},"series",". In the cabinet: the ",[370,746,734],{}," list, which offers only the fields that qualify. Each must be a ",[557,749,750],{},"keyword"," field that is filterable, facetable or sortable in the ",[346,753,754],{"href":104},"mapping",". Each field adds up to its 200 most frequent values.",[509,757,758],{"v-slot:tips":511},[351,759,760,767],{},[354,761,762,763,766],{},"Pick short values that shoppers type by name: brands, product lines, collections. A field like ",[557,764,765],{},"title"," makes no sense here, because every title would become a suggestion.",[354,768,769],{},"A field value scores like a query searched about twice, so popular queries rank above it and one-off queries below it.",[342,771,772,773,775,776,779],{},"The last row, ",[370,774,423],{},", counts the texts you added and links to the ",[346,777,423],{"href":778},"#custom-suggestions"," section below.",[337,781,417],{"id":782},"how-suggestions-behave",[342,784,785,786,479],{},"These settings apply to the next suggest request, without a rebuild. Change them and click ",[370,787,463],{},[485,789,793,797,802],{"name":790,"type":670,"default":791,"values":792},"limit","8","1 to 20",[491,794,796],{"id":795},"suggestions-per-answer","Suggestions per answer",[342,798,799,800,479],{},"How many suggestions one answer holds at most. In the cabinet: ",[370,801,796],{},[509,803,804],{"v-slot:tips":511},[351,805,806],{},[354,807,808],{},"6 to 8 fit a dropdown on a phone without scrolling. More than 10 is hard to scan while typing.",[485,810,815,819,845],{"name":811,"type":812,"default":813,"values":814},"defaultSuggestions","{ enabled, count }","enabled true, count 5","count 1 to 20",[491,816,818],{"id":817},"empty-query-suggestions","Empty query suggestions",[342,820,821,822,825,826,829,830,833,834,836,837,840,841,844],{},"What an empty ",[557,823,824],{},"q"," answers, for example when the shopper clicks into the search box before typing. With ",[557,827,828],{},"enabled",", it lists the ",[557,831,832],{},"count"," most searched queries. Off, an empty ",[557,835,824],{}," answers an empty list. In the cabinet: ",[370,838,839],{},"Empty search box",", the ",[370,842,843],{},"Show popular searches"," switch and the number next to it.",[509,846,847],{"v-slot:tips":511},[351,848,849,852,855],{},[354,850,851],{},"Only popular searches are listed here, never field values or custom suggestions.",[354,853,854],{},"A new store has no searches yet, so the list stays empty until shoppers have searched for a while.",[354,856,857,858,860,861,479],{},"To show products under the popular searches, send a search with an empty ",[557,859,824],{}," too, and pick the products with an ",[346,862,864],{"href":863},"\u002Fdocs\u002Fsearch\u002Frules#empty-search","empty-search rule",[485,866,870,874,883],{"name":867,"type":868,"default":869},"fuzzy","boolean","true",[491,871,873],{"id":872},"allow-one-typo-per-word","Allow one typo per word",[342,875,876,877,840,880,882],{},"Lets each word the shopper types differ by one letter from a suggestion, after an exact first letter: \"tpae\" still finds \"tape\". A suggestion that matches without a typo scores twice as high as one that needs the typo, so exact completions come first. In the cabinet: ",[370,878,879],{},"Typos",[370,881,873],{}," switch.",[509,884,885],{"v-slot:tips":511},[351,886,887],{},[354,888,889],{},"Leave it on for most stores. Turn it off when shoppers mostly type codes, where one changed character is a different product.",[485,891,893,897,903,914],{"name":892,"type":868,"default":869},"facetHints",[491,894,896],{"id":895},"facet-hints","Facet hints",[342,898,899,900,882],{},"Adds a category to suggestions where one stands out: \"duct tape\" in \"Tapes>Duct tapes\". The storefront can then search \"duct tape\" with that category already filtered. In the cabinet: the ",[370,901,902],{},"Show facet hints",[342,904,905,906,909,910,913],{},"A hint comes from the first facetable ",[557,907,908],{},"hierarchy"," field of the index, and only when more than half of the products the query finds sit in one category; the deepest such category wins. The 200 most popular queries get a hint. With this off, every suggestion answers ",[557,911,912],{},"facetHint: null",". Custom suggestions can carry a hint of their own.",[509,915,916],{"v-slot:tips":511},[351,917,918],{},[354,919,920,921,923],{},"Hints need a ",[557,922,908],{}," field that is facetable in the mapping. Without one, queries get no hints, but field values still point at their own field.",[485,925,929,933,942],{"name":926,"type":927,"default":928},"searchProfileKey","profile key | null","null",[491,930,932],{"id":931},"search-profile-for-a-clicked-suggestion","Search profile for a clicked suggestion",[342,934,935,936,938,939,479],{},"The profile the storefront should search with when the shopper picks a suggestion. Zaproo does not use it itself. It sends it back in every suggest answer, so the storefront does not have to hard-code it. In the cabinet: ",[370,937,932],{},", a list of the index's profiles, or ",[370,940,941],{},"None",[509,943,944],{"v-slot:related":511},[351,945,946],{},[354,947,948],{},[346,949,212],{"href":213},[337,951,423],{"id":952},"custom-suggestions",[342,954,955],{},"A custom suggestion is a text you want offered, with a weight and an optional facet hint. Use it for campaign names, new product lines nobody has searched for yet, or to push one completion above the rest.",[342,957,958,959,961,962,964],{},"To add one, go to ",[370,960,423],{}," at the bottom of the ",[370,963,242],{}," page:",[385,966,967,977,987,1003,1009],{},[354,968,969,970,973,974,479],{},"Enter the ",[370,971,972],{},"Text",", for example ",[557,975,976],{},"Black Friday packaging deals",[354,978,979,980,983,984,479],{},"Set the ",[370,981,982],{},"Weight",". The default, 10, ranks above most popular searches. See ",[346,985,982],{"href":986},"#weight",[354,988,989,990,993,994,973,997,398,1000,479],{},"Optionally pick a ",[370,991,992],{},"Facet hint field"," and enter a ",[370,995,996],{},"Facet hint value",[557,998,999],{},"categories",[557,1001,1002],{},"Deals",[354,1004,530,1005,1008],{},[370,1006,1007],{},"Add",". The suggestion appears in the table.",[354,1010,530,1011,1013],{},[370,1012,405],{}," at the top of the page. A new or deleted custom suggestion only shows up after the next build.",[342,1015,1016],{},"To delete one, click the bin icon in its row. It is deleted at once, without a confirmation.",[491,1018,1020],{"id":1019},"with-the-api-or-mcp","With the API or MCP",[545,1022],{"auth":1023,"method":1024,"path":1025},"Project member or any secret key","GET","\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Fsuggestions\u002Fcustom",[545,1027],{"auth":547,"method":548,"path":1025},[545,1029],{"auth":547,"method":1030,"path":1031},"DELETE","\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Fsuggestions\u002Fcustom\u002F:suggestionId",[551,1033,1035],{"className":553,"code":1034,"language":555,"meta":511,"style":511},"curl -X POST https:\u002F\u002Fapi.search.zaproo.cloud\u002Fv1\u002Fprojects\u002F$PROJECT_ID\u002Findices\u002F$INDEX_ID\u002Fsuggestions\u002Fcustom \\\n  -H \"Authorization: Bearer $ZS_KEY\" -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"text\": \"black friday packaging deals\", \"weight\": 20, \"facetHint\": {\"key\": \"categories\", \"value\": \"Deals\"}}'\n",[557,1036,1037,1058,1077],{"__ignoreMap":511},[560,1038,1039,1041,1043,1045,1047,1049,1051,1053,1056],{"class":562,"line":563},[560,1040,567],{"class":566},[560,1042,571],{"class":570},[560,1044,575],{"class":574},[560,1046,578],{"class":574},[560,1048,582],{"class":581},[560,1050,585],{"class":574},[560,1052,588],{"class":581},[560,1054,1055],{"class":574},"\u002Fsuggestions\u002Fcustom",[560,1057,595],{"class":594},[560,1059,1060,1062,1064,1066,1069,1072,1075],{"class":562,"line":598},[560,1061,601],{"class":570},[560,1063,604],{"class":574},[560,1065,607],{"class":581},[560,1067,1068],{"class":574},"\"",[560,1070,1071],{"class":570}," -H",[560,1073,1074],{"class":574}," \"Content-Type: application\u002Fjson\"",[560,1076,595],{"class":594},[560,1078,1079,1082],{"class":562,"line":613},[560,1080,1081],{"class":570},"  -d",[560,1083,1084],{"class":574}," '{\"text\": \"black friday packaging deals\", \"weight\": 20, \"facetHint\": {\"key\": \"categories\", \"value\": \"Deals\"}}'\n",[1086,1087,1088,1098,1105],"field-group",{},[1089,1090,1092],"field",{"name":1091,"type":488,":required":869},"text",[342,1093,1094,1095,479],{},"1 to 100 characters. Unique per index after lowercasing and collapsing spaces, otherwise ",[557,1096,1097],{},"409 SUGGESTION_TAKEN",[1089,1099,1102],{"name":1100,"type":1101,":required":869},"weight","number",[342,1103,1104],{},"Above 0, up to 1,000,000. It becomes the suggestion's score as is.",[1089,1106,1109],{"name":1107,"type":1108},"facetHint","{ key, value } | null",[342,1110,1111,1112,479],{},"The field and value the suggestion points at. Defaults to ",[557,1113,928],{},[342,1115,1116,1117,1120],{},"An index holds up to 1000 custom suggestions; one more answers ",[557,1118,1119],{},"409 SUGGESTION_LIMIT_REACHED",". MCP has no tool for custom suggestions.",[491,1122,982],{"id":1100},[342,1124,1125,1126,1129],{},"A popular search scores ",[557,1127,1128],{},"log1p(searches)",", the natural log of one plus the number of visitors who searched it. A query searched by 100 visitors scores about 4.6, by 10,000 about 9.2. Your weight is compared with that number directly:",[1131,1132,1133,1145],"table",{},[1134,1135,1136],"thead",{},[1137,1138,1139,1142],"tr",{},[1140,1141,982],"th",{},[1140,1143,1144],{},"Ranks",[1146,1147,1148,1157,1165,1173],"tbody",{},[1137,1149,1150,1154],{},[1151,1152,1153],"td",{},"1",[1151,1155,1156],{},"Like a field value: above queries searched once, below anything popular.",[1137,1158,1159,1162],{},[1151,1160,1161],{},"5",[1151,1163,1164],{},"Above queries with fewer than about 150 visitors.",[1137,1166,1167,1170],{},[1151,1168,1169],{},"10",[1151,1171,1172],{},"Above queries with fewer than about 22,000 visitors.",[1137,1174,1175,1178],{},[1151,1176,1177],{},"15 and above",[1151,1179,1180],{},"Above every popular search.",[342,1182,1183],{},"When a custom suggestion has the same text as a popular search or a field value, the custom one wins: its weight and its hint are used.",[337,1185,1187],{"id":1186},"change-the-settings-with-the-api","Change the settings with the API",[342,1189,1190,1191,1193],{},"The cabinet's two settings forms are one config per index. The first time anyone opens it, in the cabinet or with ",[557,1192,1024],{},", it is created with the defaults above and a new suggest key.",[545,1195],{"auth":1023,"method":1024,"path":1196},"\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Fsuggestions\u002Fconfig",[545,1198],{"auth":547,"method":1199,"path":1196},"PUT",[342,1201,1202,1204,1205,1207,1208,1211],{},[557,1203,1199],{}," replaces the whole config, so send every setting. A field that is not a keyword field with doc values, or a ",[557,1206,926],{}," that no profile of this index has, answers ",[557,1209,1210],{},"400 SUGGEST_CONFIG_INVALID"," with one issue per problem. MCP has no tool for the config.",[551,1213,1215],{"className":553,"code":1214,"language":555,"meta":511,"style":511},"curl -X PUT https:\u002F\u002Fapi.search.zaproo.cloud\u002Fv1\u002Fprojects\u002F$PROJECT_ID\u002Findices\u002F$INDEX_ID\u002Fsuggestions\u002Fconfig \\\n  -H \"Authorization: Bearer $ZS_KEY\" -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"limit\": 8,\n    \"fuzzy\": true,\n    \"defaultSuggestions\": {\"enabled\": true, \"count\": 5},\n    \"facetHints\": true,\n    \"searchProfileKey\": \"PROFILE_KEY\",\n    \"fields\": [\"brand\"],\n    \"minQueryCount\": 2,\n    \"lookbackDays\": 30\n  }'\n",[557,1216,1217,1239,1255,1262,1268,1274,1280,1286,1292,1298,1304,1310],{"__ignoreMap":511},[560,1218,1219,1221,1223,1226,1228,1230,1232,1234,1237],{"class":562,"line":563},[560,1220,567],{"class":566},[560,1222,571],{"class":570},[560,1224,1225],{"class":574}," PUT",[560,1227,578],{"class":574},[560,1229,582],{"class":581},[560,1231,585],{"class":574},[560,1233,588],{"class":581},[560,1235,1236],{"class":574},"\u002Fsuggestions\u002Fconfig",[560,1238,595],{"class":594},[560,1240,1241,1243,1245,1247,1249,1251,1253],{"class":562,"line":598},[560,1242,601],{"class":570},[560,1244,604],{"class":574},[560,1246,607],{"class":581},[560,1248,1068],{"class":574},[560,1250,1071],{"class":570},[560,1252,1074],{"class":574},[560,1254,595],{"class":594},[560,1256,1257,1259],{"class":562,"line":613},[560,1258,1081],{"class":570},[560,1260,1261],{"class":574}," '{\n",[560,1263,1265],{"class":562,"line":1264},4,[560,1266,1267],{"class":574},"    \"limit\": 8,\n",[560,1269,1271],{"class":562,"line":1270},5,[560,1272,1273],{"class":574},"    \"fuzzy\": true,\n",[560,1275,1277],{"class":562,"line":1276},6,[560,1278,1279],{"class":574},"    \"defaultSuggestions\": {\"enabled\": true, \"count\": 5},\n",[560,1281,1283],{"class":562,"line":1282},7,[560,1284,1285],{"class":574},"    \"facetHints\": true,\n",[560,1287,1289],{"class":562,"line":1288},8,[560,1290,1291],{"class":574},"    \"searchProfileKey\": \"PROFILE_KEY\",\n",[560,1293,1295],{"class":562,"line":1294},9,[560,1296,1297],{"class":574},"    \"fields\": [\"brand\"],\n",[560,1299,1301],{"class":562,"line":1300},10,[560,1302,1303],{"class":574},"    \"minQueryCount\": 2,\n",[560,1305,1307],{"class":562,"line":1306},11,[560,1308,1309],{"class":574},"    \"lookbackDays\": 30\n",[560,1311,1313],{"class":562,"line":1312},12,[560,1314,1315],{"class":574},"  }'\n",[337,1317,1319],{"id":1318},"the-suggest-request","The suggest request",[342,1321,1322,1323,1325,1326,1328],{},"Your storefront calls one route with the suggest key. The body holds only ",[557,1324,824],{},", up to 100 characters. ",[346,1327,29],{"href":30}," shows how a search box uses it.",[545,1330],{"auth":1331,"method":548,"path":1332},"Public key from an allowed origin, or a secret key of the same project","\u002Fv1\u002Fsuggest\u002F:suggestKey",[1334,1335,1336,1385],"tabs",{},[1337,1338,1340],"tabs-item",{"icon":1339,"label":567},"i-lucide-terminal",[551,1341,1343],{"className":553,"code":1342,"language":555,"meta":511,"style":511},"curl -X POST https:\u002F\u002Fapi.search.zaproo.cloud\u002Fv1\u002Fsuggest\u002F$SUGGEST_KEY \\\n  -H \"Authorization: Bearer $ZS_KEY\" -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"q\": \"ta\"}'\n",[557,1344,1345,1362,1378],{"__ignoreMap":511},[560,1346,1347,1349,1351,1353,1356,1359],{"class":562,"line":563},[560,1348,567],{"class":566},[560,1350,571],{"class":570},[560,1352,575],{"class":574},[560,1354,1355],{"class":574}," https:\u002F\u002Fapi.search.zaproo.cloud\u002Fv1\u002Fsuggest\u002F",[560,1357,1358],{"class":581},"$SUGGEST_KEY ",[560,1360,1361],{"class":594},"\\\n",[560,1363,1364,1366,1368,1370,1372,1374,1376],{"class":562,"line":598},[560,1365,601],{"class":570},[560,1367,604],{"class":574},[560,1369,607],{"class":581},[560,1371,1068],{"class":574},[560,1373,1071],{"class":570},[560,1375,1074],{"class":574},[560,1377,595],{"class":594},[560,1379,1380,1382],{"class":562,"line":613},[560,1381,1081],{"class":570},[560,1383,1384],{"class":574}," '{\"q\": \"ta\"}'\n",[1337,1386,1388,1395],{"icon":279,"label":1387},"MCP",[551,1389,1393],{"className":1390,"code":1392,"language":1091,"meta":511},[1391],"language-text","Suggest completions for \"ta\" on the products index.\n",[557,1394,1392],{"__ignoreMap":511},[342,1396,1397,1398,1401],{},"The agent calls the ",[557,1399,1400],{},"suggest"," tool with the index id. It answers the same as the public route.",[551,1403,1407],{"className":1404,"code":1405,"language":1406,"meta":511,"style":511},"language-json shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","{\n  \"suggestions\": [\n    {\"text\": \"tape\", \"kind\": \"query\", \"facetHint\": {\"key\": \"categories\", \"value\": \"Tapes\"}},\n    {\"text\": \"Packwell\", \"kind\": \"field\", \"facetHint\": {\"key\": \"brand\", \"value\": \"Packwell\"}},\n    {\"text\": \"duct tape\", \"kind\": \"query\", \"facetHint\": null}\n  ],\n  \"searchProfileKey\": \"PROFILE_KEY\",\n  \"tookMs\": 4\n}\n","json",[557,1408,1409,1414,1423,1476,1519,1549,1554,1567,1577],{"__ignoreMap":511},[560,1410,1411],{"class":562,"line":563},[560,1412,1413],{"class":581},"{\n",[560,1415,1416,1420],{"class":562,"line":598},[560,1417,1419],{"class":1418},"sb7M8","  \"suggestions\"",[560,1421,1422],{"class":581},": [\n",[560,1424,1425,1428,1431,1434,1437,1439,1442,1444,1447,1449,1452,1455,1458,1460,1463,1465,1468,1470,1473],{"class":562,"line":613},[560,1426,1427],{"class":581},"    {",[560,1429,1430],{"class":1418},"\"text\"",[560,1432,1433],{"class":581},": ",[560,1435,1436],{"class":574},"\"tape\"",[560,1438,449],{"class":581},[560,1440,1441],{"class":1418},"\"kind\"",[560,1443,1433],{"class":581},[560,1445,1446],{"class":574},"\"query\"",[560,1448,449],{"class":581},[560,1450,1451],{"class":1418},"\"facetHint\"",[560,1453,1454],{"class":581},": {",[560,1456,1457],{"class":1418},"\"key\"",[560,1459,1433],{"class":581},[560,1461,1462],{"class":574},"\"categories\"",[560,1464,449],{"class":581},[560,1466,1467],{"class":1418},"\"value\"",[560,1469,1433],{"class":581},[560,1471,1472],{"class":574},"\"Tapes\"",[560,1474,1475],{"class":581},"}},\n",[560,1477,1478,1480,1482,1484,1487,1489,1491,1493,1496,1498,1500,1502,1504,1506,1509,1511,1513,1515,1517],{"class":562,"line":1264},[560,1479,1427],{"class":581},[560,1481,1430],{"class":1418},[560,1483,1433],{"class":581},[560,1485,1486],{"class":574},"\"Packwell\"",[560,1488,449],{"class":581},[560,1490,1441],{"class":1418},[560,1492,1433],{"class":581},[560,1494,1495],{"class":574},"\"field\"",[560,1497,449],{"class":581},[560,1499,1451],{"class":1418},[560,1501,1454],{"class":581},[560,1503,1457],{"class":1418},[560,1505,1433],{"class":581},[560,1507,1508],{"class":574},"\"brand\"",[560,1510,449],{"class":581},[560,1512,1467],{"class":1418},[560,1514,1433],{"class":581},[560,1516,1486],{"class":574},[560,1518,1475],{"class":581},[560,1520,1521,1523,1525,1527,1530,1532,1534,1536,1538,1540,1542,1544,1546],{"class":562,"line":1270},[560,1522,1427],{"class":581},[560,1524,1430],{"class":1418},[560,1526,1433],{"class":581},[560,1528,1529],{"class":574},"\"duct tape\"",[560,1531,449],{"class":581},[560,1533,1441],{"class":1418},[560,1535,1433],{"class":581},[560,1537,1446],{"class":574},[560,1539,449],{"class":581},[560,1541,1451],{"class":1418},[560,1543,1433],{"class":581},[560,1545,928],{"class":570},[560,1547,1548],{"class":581},"}\n",[560,1550,1551],{"class":562,"line":1276},[560,1552,1553],{"class":581},"  ],\n",[560,1555,1556,1559,1561,1564],{"class":562,"line":1282},[560,1557,1558],{"class":1418},"  \"searchProfileKey\"",[560,1560,1433],{"class":581},[560,1562,1563],{"class":574},"\"PROFILE_KEY\"",[560,1565,1566],{"class":581},",\n",[560,1568,1569,1572,1574],{"class":562,"line":1288},[560,1570,1571],{"class":1418},"  \"tookMs\"",[560,1573,1433],{"class":581},[560,1575,1576],{"class":570},"4\n",[560,1578,1579],{"class":562,"line":1294},[560,1580,1548],{"class":581},[342,1582,1583,1584,1587,1588,1591],{},"A suggest key of another project, or of an index outside the key's index scope, answers ",[557,1585,1586],{},"404 SUGGEST_NOT_FOUND",". Before the first build, every request answers an empty list. Suggest has its own ",[346,1589,1590],{"href":86},"rate limit",", twice that of search, because it fires on every keystroke: 1200 requests a minute per key and 2400 per client IP.",[342,1593,1594,1595,1597],{},"The cabinet's ",[370,1596,391],{}," panel uses a second route that takes the index id instead of the suggest key and answers the same:",[545,1599],{"auth":1023,"method":548,"path":1600},"\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Fsuggest",[342,1602,1603,1604,1607,1608,1611],{},"Call the public route from the shopper's browser with a public key whose allowed origins list your shop's domains. From a server, use a secret key with read access, scoped to the index: a server sends no ",[557,1605,1606],{},"Origin"," header, so a public key answers ",[557,1609,1610],{},"403 ORIGIN_NOT_ALLOWED"," there.",[491,1613,1615],{"id":1614},"suggestion-kinds","Suggestion kinds",[1131,1617,1618,1637],{},[1134,1619,1620],{},[1137,1621,1622,1627,1630,1633],{},[1140,1623,1624],{},[557,1625,1626],{},"kind",[1140,1628,1629],{},"Shown in Try it as",[1140,1631,1632],{},"Comes from",[1140,1634,1635],{},[557,1636,1107],{},[1146,1638,1639,1656,1672],{},[1137,1640,1641,1646,1650,1653],{},[1151,1642,1643],{},[557,1644,1645],{},"query",[1151,1647,1648],{},[370,1649,448],{},[1151,1651,1652],{},"A search that shoppers made and that found products",[1151,1654,1655],{},"The category most of its products sit in, when there is one",[1137,1657,1658,1662,1666,1669],{},[1151,1659,1660],{},[557,1661,1089],{},[1151,1663,1664],{},[370,1665,452],{},[1151,1667,1668],{},"A value of one of the chosen fields",[1151,1670,1671],{},"That field and value",[1137,1673,1674,1679,1683,1686],{},[1151,1675,1676],{},[557,1677,1678],{},"custom",[1151,1680,1681],{},[370,1682,456],{},[1151,1684,1685],{},"A custom suggestion",[1151,1687,1688,1689],{},"The hint you gave it, or ",[557,1690,928],{},[342,1692,1693],{},"Popular searches are shown as they are stored, lowercased with spaces collapsed. Field values and custom suggestions keep the spelling you gave them.",[337,1695,478],{"id":1696},"common-mistakes",[351,1698,1699,1707,1712,1726],{},[354,1700,1701,1702,1704,1705,479],{},"No suggestions on a new store. Popular searches need searches first. Add the brand field under ",[370,1703,734],{}," and a few custom suggestions, then click ",[370,1706,405],{},[354,1708,1709,1710,479],{},"A change to the sources does nothing. Field values, the minimum count, the lookback and custom suggestions only apply with the next build. Click ",[370,1711,405],{},[354,1713,1714,1715,1719,1720,1722,1723,1725],{},"Test searches on the storefront become suggestions. Searches from the cabinet and from MCP never feed autocomplete, but tests on your live storefront do. Add your office to the ",[346,1716,1718],{"href":1717},"\u002Fdocs\u002Fanalytics\u002Fsearch-analytics#excluded-ip-addresses","excluded IP addresses",", keep ",[370,1721,653],{}," at 2 or more and send a ",[557,1724,685],{}," from the storefront, so a handful of test searches from one person stays out.",[354,1727,1728,1729,1732,1733,1736,1737,479],{},"Clicks on suggestions don't show in analytics. Suggest requests are not logged. Send ",[557,1730,1731],{},"suggestion_click"," ",[346,1734,1735],{"href":272},"events"," to fill the ",[346,1738,1740],{"href":1739},"\u002Fdocs\u002Fanalytics\u002Freports#autocomplete","Autocomplete report",[337,1742,1744],{"id":1743},"related","Related",[351,1746,1747,1751,1755,1759,1763,1767,1771,1775],{},[354,1748,1749],{},[346,1750,23],{"href":24},[354,1752,1753],{},[346,1754,29],{"href":30},[354,1756,1757],{},[346,1758,212],{"href":213},[354,1760,1761],{},[346,1762,103],{"href":104},[354,1764,1765],{},[346,1766,260],{"href":261},[354,1768,1769],{},[346,1770,265],{"href":1739},[354,1772,1773],{},[346,1774,290],{"href":291},[354,1776,1777],{},[346,1778,315],{"href":1779},"\u002Fdocs\u002Freference\u002Flimits#autocomplete",[1781,1782,1783],"style",{},"html pre.shiki code .szw1H, html code.shiki .szw1H{--shiki-light:#702C00;--shiki-default:#702C00;--shiki-dark:#FFB757}html pre.shiki code .ssYy9, html code.shiki .ssYy9{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#91CBFF}html pre.shiki code .semJd, html code.shiki .semJd{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#ADDCFF}html pre.shiki code .s7iLA, html code.shiki .s7iLA{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html pre.shiki code .sklAV, html code.shiki .sklAV{--shiki-light:#A0111F;--shiki-default:#A0111F;--shiki-dark:#FF9492}html pre.shiki code .sq92B, html code.shiki .sq92B{--shiki-light:#66707B;--shiki-default:#66707B;--shiki-dark:#BDC4CC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html pre.shiki code .sb7M8, html code.shiki .sb7M8{--shiki-light:#024C1A;--shiki-default:#024C1A;--shiki-dark:#72F088}",{"title":511,"searchDepth":598,"depth":598,"links":1785},[1786,1787,1788,1792,1798,1805,1809,1810,1813,1814],{"id":339,"depth":598,"text":340},{"id":439,"depth":598,"text":391},{"id":482,"depth":598,"text":483,"children":1789},[1790,1791],{"id":493,"depth":613,"text":397},{"id":523,"depth":613,"text":524},{"id":635,"depth":598,"text":411,"children":1793},[1794,1795,1796,1797],{"id":646,"depth":613,"text":647},{"id":675,"depth":613,"text":676},{"id":710,"depth":613,"text":711},{"id":733,"depth":613,"text":734},{"id":782,"depth":598,"text":417,"children":1799},[1800,1801,1802,1803,1804],{"id":795,"depth":613,"text":796},{"id":817,"depth":613,"text":818},{"id":872,"depth":613,"text":873},{"id":895,"depth":613,"text":896},{"id":931,"depth":613,"text":932},{"id":952,"depth":598,"text":423,"children":1806},[1807,1808],{"id":1019,"depth":613,"text":1020},{"id":1100,"depth":613,"text":982},{"id":1186,"depth":598,"text":1187},{"id":1318,"depth":598,"text":1319,"children":1811},[1812],{"id":1614,"depth":613,"text":1615},{"id":1696,"depth":598,"text":478},{"id":1743,"depth":598,"text":1744},"md",{},{"icon":244},{"title":242,"description":251},"a5eBBawzxNuqKfMPAVNtE9LWM1aeK81LQf_RpnPWrak",[1821,1822],{"title":236,"path":237,"stem":238,"description":239,"icon":240,"children":-1},{"title":260,"path":261,"stem":262,"description":263,"icon":255,"children":-1},1793717706322]