[{"data":1,"prerenderedAt":1132},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Fsearch\u002Fsynonyms":331,"docs-\u002Fdocs\u002Fsearch\u002Fsynonyms-surround":1129},[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":224,"body":333,"description":227,"extension":1124,"meta":1125,"navigation":1126,"path":225,"seo":1127,"stem":226,"__hash__":1128},"docs\u002Fdocs\u002F5.search\u002F4.synonyms.md",{"type":334,"value":335,"toc":1107},"minimark",[336,341,345,353,357,360,618,621,694,768,772,775,794,798,826,829,832,838,842,846,849,881,885,888,894,903,907,939,946,950,953,956,963,977,991,1001,1039,1043,1074,1078,1103],[337,338,340],"h2",{"id":339},"what-synonyms-do","What synonyms do",[342,343,344],"p",{},"Shoppers do not use your catalog's words. One types \"bubblewrap\", another \"air cushion\", and the product title says \"bubble wrap\". A synonym rule tells the search that these words mean the same thing, so each of them finds the products.",[342,346,347,348,352],{},"Synonyms belong to an index and apply to every ",[349,350,351],"a",{"href":213},"search profile"," of it. They work at search time. A saved change applies from the next search on, with no reindex and no upload.",[337,354,356],{"id":355},"add-a-synonym-rule","Add a synonym rule",[342,358,359],{},"Only organization owners and admins can add, change and delete synonyms.",[361,362,363,465,593],"tabs",{},[364,365,367,422,430,458],"tabs-item",{"icon":275,"label":366},"Cabinet",[368,369,370,382,401,416],"ol",{},[371,372,373,374,377,378,381],"li",{},"Open the index and click ",[375,376,224],"strong",{},", then ",[375,379,380],{},"Add rule",".",[371,383,384,385,388,389,392,393,396,397,381],{},"Under ",[375,386,387],{},"Rule type",", pick ",[375,390,391],{},"Equivalent"," or ",[375,394,395],{},"One way",". See ",[349,398,400],{"href":399},"#rule-types","Rule types",[371,402,403,404,407,408,411,412,415],{},"For an equivalent rule, type at least two ",[375,405,406],{},"Terms",". For a one-way rule, fill in ",[375,409,410],{},"When shoppers search"," and ",[375,413,414],{},"Also find",". Press Enter or a comma after each term.",[371,417,418,419,381],{},"Read the sentence under the fields, which says what the rule will do, and click ",[375,420,421],{},"Save rule",[342,423,424],{},[425,426],"img",{"alt":427,"src":428,"title":429},"The Synonyms page with an explanation of equivalent and one way rules, a list of rules such as scotch to tape and bubble wrap with bubblewrap and air cushion, and a bulk import and export section","\u002Fdocs\u002Fscreenshots\u002Fsynonyms.png","Synonym rules of both types",[342,431,432,433,436,437,440,441,444,445,411,447,449,450,453,454,457],{},"The ",[375,434,435],{},"Rules"," table lists every rule. ",[375,438,439],{},"Find a rule by any word"," searches the terms, and ",[375,442,443],{},"All",", ",[375,446,391],{},[375,448,395],{}," filter by type. ",[375,451,452],{},"Edit"," on a row opens the same form. ",[375,455,456],{},"Delete"," removes the rule at once, without asking.",[342,459,460,461,381],{},"To check a rule, search for one of its terms in the ",[349,462,464],{"href":463},"\u002Fdocs\u002Fsearch\u002Fsearch-api#try-it-in-the-playground","playground",[364,466,469,585],{"icon":467,"label":468},"i-lucide-terminal","curl",[470,471,476],"pre",{"className":472,"code":473,"language":474,"meta":475,"style":475},"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\u002Fsynonyms \\\n  -H \"Authorization: Bearer $ZS_KEY\" -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"type\": \"EQUIVALENT\", \"terms\": [\"bubble wrap\", \"bubblewrap\", \"air cushion\"]}'\n\ncurl \"https:\u002F\u002Fapi.search.zaproo.cloud\u002Fv1\u002Fprojects\u002F$PROJECT_ID\u002Findices\u002F$INDEX_ID\u002Fsynonyms?q=bubble&type=EQUIVALENT\" \\\n  -H \"Authorization: Bearer $ZS_KEY\"\n","bash","",[477,478,479,515,538,547,554,573],"code",{"__ignoreMap":475},[480,481,484,487,491,495,498,502,505,508,511],"span",{"class":482,"line":483},"line",1,[480,485,468],{"class":486},"szw1H",[480,488,490],{"class":489},"ssYy9"," -X",[480,492,494],{"class":493},"semJd"," POST",[480,496,497],{"class":493}," https:\u002F\u002Fapi.search.zaproo.cloud\u002Fv1\u002Fprojects\u002F",[480,499,501],{"class":500},"s7iLA","$PROJECT_ID",[480,503,504],{"class":493},"\u002Findices\u002F",[480,506,507],{"class":500},"$INDEX_ID",[480,509,510],{"class":493},"\u002Fsynonyms",[480,512,514],{"class":513},"sklAV"," \\\n",[480,516,518,521,524,527,530,533,536],{"class":482,"line":517},2,[480,519,520],{"class":489},"  -H",[480,522,523],{"class":493}," \"Authorization: Bearer ",[480,525,526],{"class":500},"$ZS_KEY",[480,528,529],{"class":493},"\"",[480,531,532],{"class":489}," -H",[480,534,535],{"class":493}," \"Content-Type: application\u002Fjson\"",[480,537,514],{"class":513},[480,539,541,544],{"class":482,"line":540},3,[480,542,543],{"class":489},"  -d",[480,545,546],{"class":493}," '{\"type\": \"EQUIVALENT\", \"terms\": [\"bubble wrap\", \"bubblewrap\", \"air cushion\"]}'\n",[480,548,550],{"class":482,"line":549},4,[480,551,553],{"emptyLinePlaceholder":552},true,"\n",[480,555,557,559,562,564,566,568,571],{"class":482,"line":556},5,[480,558,468],{"class":486},[480,560,561],{"class":493}," \"https:\u002F\u002Fapi.search.zaproo.cloud\u002Fv1\u002Fprojects\u002F",[480,563,501],{"class":500},[480,565,504],{"class":493},[480,567,507],{"class":500},[480,569,570],{"class":493},"\u002Fsynonyms?q=bubble&type=EQUIVALENT\"",[480,572,514],{"class":513},[480,574,576,578,580,582],{"class":482,"line":575},6,[480,577,520],{"class":489},[480,579,523],{"class":493},[480,581,526],{"class":500},[480,583,584],{"class":493},"\"\n",[342,586,587,588,592],{},"See ",[349,589,591],{"href":590},"#manage-rules-over-the-api","Manage rules over the API"," for every route.",[364,594,596,604],{"icon":279,"label":595},"MCP",[470,597,602],{"className":598,"code":600,"language":601,"meta":475},[599],"language-text","Add synonyms to the products index: bubble wrap, bubblewrap and air cushion\nmean the same, and a search for scotch should also find tape.\n","text",[477,603,600],{"__ignoreMap":475},[342,605,606,607,610,611,411,614,617],{},"The agent calls ",[477,608,609],{},"upsert_synonyms"," once per rule. ",[477,612,613],{},"list_synonyms",[477,615,616],{},"delete_synonyms"," list and remove rules.",[337,619,400],{"id":620},"rule-types",[622,623,627,631,636,682],"setting",{"name":624,"type":625,"values":626},"EQUIVALENT","rule type","2 to 100 terms",[628,629,391],"h3",{"id":630},"equivalent",[342,632,633,634,381],{},"Every term finds all the others. A search for any term also searches for each of the other terms. In the cabinet this type is called ",[375,635,391],{},[470,637,641],{"className":638,"code":639,"language":640,"meta":475,"style":475},"language-json shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","{ \"type\": \"EQUIVALENT\", \"terms\": [\"bubble wrap\", \"bubblewrap\", \"air cushion\"] }\n","json",[477,642,643],{"__ignoreMap":475},[480,644,645,648,652,655,658,660,663,666,669,671,674,676,679],{"class":482,"line":483},[480,646,647],{"class":500},"{ ",[480,649,651],{"class":650},"sb7M8","\"type\"",[480,653,654],{"class":500},": ",[480,656,657],{"class":493},"\"EQUIVALENT\"",[480,659,444],{"class":500},[480,661,662],{"class":650},"\"terms\"",[480,664,665],{"class":500},": [",[480,667,668],{"class":493},"\"bubble wrap\"",[480,670,444],{"class":500},[480,672,673],{"class":493},"\"bubblewrap\"",[480,675,444],{"class":500},[480,677,678],{"class":493},"\"air cushion\"",[480,680,681],{"class":500},"] }\n",[683,684,685],"template",{"v-slot:tips":475},[686,687,688,691],"ul",{},[371,689,690],{},"Use it for true synonyms and spelling variants: \"bubble wrap, bubblewrap\".",[371,692,693],{},"Keep each rule to one meaning. A term that sits in two equivalent rules joins two groups that may not mean the same thing.",[622,695,698,701,720,758],{"name":696,"type":625,"values":697},"ONE_WAY","1 to 100 terms and 1 to 100 targets",[628,699,395],{"id":700},"one-way",[342,702,703,704,706,707,709,710,713,714,709,716,719],{},"The terms also find the targets, never the reverse. In the cabinet this type is called ",[375,705,395],{},", and its fields are ",[375,708,410],{}," (",[477,711,712],{},"terms",") and ",[375,715,414],{},[477,717,718],{},"target",").",[470,721,723],{"className":638,"code":722,"language":640,"meta":475,"style":475},"{ \"type\": \"ONE_WAY\", \"terms\": [\"mailer\"], \"target\": [\"shipping box\"] }\n",[477,724,725],{"__ignoreMap":475},[480,726,727,729,731,733,736,738,740,742,745,748,751,753,756],{"class":482,"line":483},[480,728,647],{"class":500},[480,730,651],{"class":650},[480,732,654],{"class":500},[480,734,735],{"class":493},"\"ONE_WAY\"",[480,737,444],{"class":500},[480,739,662],{"class":650},[480,741,665],{"class":500},[480,743,744],{"class":493},"\"mailer\"",[480,746,747],{"class":500},"], ",[480,749,750],{"class":650},"\"target\"",[480,752,665],{"class":500},[480,754,755],{"class":493},"\"shipping box\"",[480,757,681],{"class":500},[683,759,760],{"v-slot:tips":475},[686,761,762,765],{},[371,763,764],{},"Use it from a specific word to a broader one. \"mailer\" may show other shipping boxes, but a search for \"shipping box\" should not only find mailers.",[371,766,767],{},"It also helps with brand names people use for the whole category, such as \"scotch\" for tape.",[337,769,771],{"id":770},"how-a-search-uses-them","How a search uses them",[342,773,774],{},"The search reads the query word by word, left to right. Where words match a term of a rule, it adds a variant of the query with that term swapped for a synonym. \"large bubblewrap\" becomes three searches at once: \"large bubblewrap\", \"large bubble wrap\" and \"large air cushion\". A product that matches any of them is a result.",[686,776,777,780,783,786,789],{},[371,778,779],{},"The words the shopper typed rank first. Variants count slightly less (0.9 against 1), so a product with the shopper's own word tends to rank above one that only has the synonym.",[371,781,782],{},"Terms can have several words, such as \"shipping box\". Where two terms overlap, the longer one wins.",[371,784,785],{},"A query gets at most 8 variants, the original included. Each variant swaps one term. A variant never swaps two terms at once.",[371,787,788],{},"Matching ignores capital letters. It does not ignore accents or punctuation: \"tape,\" with a comma does not match the term \"tape\".",[371,790,791,793],{},[349,792,230],{"href":231}," see the variants too, so a rule for \"tape\" also fires for \"scotch\".",[337,795,797],{"id":796},"term-rules","Term rules",[686,799,800,803,817,820],{},[371,801,802],{},"A term is 1 to 100 characters, with spaces around it trimmed.",[371,804,805,806,444,809,812,813,816],{},"A term cannot contain ",[477,807,808],{},",",[477,810,811],{},"=>"," or a line break, and cannot start with ",[477,814,815],{},"#",". Those characters are syntax in the Solr format.",[371,818,819],{},"The terms of one side must be distinct, ignoring capital letters and extra spaces.",[371,821,822,823,381],{},"An index holds up to 10,000 rules. Above that a create or an import answers ",[477,824,825],{},"409 SYNONYM_LIMIT_REACHED",[337,827,591],{"id":828},"manage-rules-over-the-api",[342,830,831],{},"The cabinet uses these routes. Call them to manage synonyms from a script.",[833,834],"api-route",{"auth":835,"method":836,"path":837},"Project member or any secret key","GET","\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Fsynonyms",[833,839],{"auth":840,"method":841,"path":837},"Project admin or a full-access secret key","POST",[833,843],{"auth":840,"method":844,"path":845},"PUT","\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Fsynonyms\u002F:synonymId",[833,847],{"auth":840,"method":848,"path":845},"DELETE",[342,850,851,853,854,857,858,861,862,865,866,869,870,709,873,392,875,877,878,880],{},[477,852,836],{}," lists rules page by page. It takes ",[477,855,856],{},"limit"," (1 to 100, default 25), ",[477,859,860],{},"cursor"," (the ",[477,863,864],{},"nextCursor"," of the previous page), ",[477,867,868],{},"q"," (any part of a term or target, ignoring case) and ",[477,871,872],{},"type",[477,874,624],{},[477,876,696],{},"). ",[477,879,844],{}," replaces the rule.",[337,882,884],{"id":883},"import-and-export","Import and export",[342,886,887],{},"The bulk format is the Solr synonyms text that Elasticsearch, OpenSearch and other search services also read. One rule per line:",[470,889,892],{"className":890,"code":891,"language":601,"meta":475},[599],"# Equivalent: every term finds the others\nbubble wrap, bubblewrap, air cushion\ncarton, cardboard box\n# One way: the left side also finds the right side\nscotch => tape\nmailer, mailing box => shipping box\n",[477,893,891],{"__ignoreMap":475},[342,895,896,897,899,900,902],{},"Blank lines and lines starting with ",[477,898,815],{}," are skipped. A line with ",[477,901,811],{}," is a one-way rule, any other line is an equivalent rule.",[628,904,906],{"id":905},"in-the-cabinet","In the cabinet",[368,908,909,919,922,932],{},[371,910,911,912,914,915,918],{},"On the ",[375,913,224],{}," page, open ",[375,916,917],{},"Bulk import and export (Solr text)"," under the table.",[371,920,921],{},"Paste the rules into the text box, one per line.",[371,923,924,925,928,929,381],{},"Pick ",[375,926,927],{},"Append"," to add them to the existing rules, or ",[375,930,931],{},"Replace all rules",[371,933,934,935,938],{},"Click ",[375,936,937],{},"Import",". The line under the buttons counts the rules imported, deleted and in total.",[342,940,941,942,945],{},"To export, click ",[375,943,944],{},"Load export into the box",". It fills the text box with the current rules, ready to copy.",[628,947,949],{"id":948},"with-the-api","With the API",[833,951],{"auth":840,"method":841,"path":952},"\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Fsynonyms\u002Fimport",[833,954],{"auth":835,"method":836,"path":955},"\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Fsynonyms\u002Fexport",[342,957,958,959,962],{},"The import body is ",[477,960,961],{},"{\"text\": \"...\", \"mode\": \"append\"}",", with up to 2,000,000 characters of text.",[686,964,965,971],{},[371,966,967,970],{},[477,968,969],{},"append"," (the default) adds the imported rules to the existing ones.",[371,972,973,976],{},[477,974,975],{},"replace"," deletes every existing rule and stores the imported ones in their place, in one step. Searches see either the old set or the new one, never a mix.",[342,978,979,980,983,984,987,988,381],{},"The answer counts what happened: ",[477,981,982],{},"{\"imported\": 4, \"deleted\": 0, \"total\": 4}",". If a line is not a valid rule, nothing is imported, and the API answers ",[477,985,986],{},"400 SYNONYM_PARSE_FAILED"," with the line number in ",[477,989,990],{},"details",[342,992,993,994,997,998,1000],{},"The export answers ",[477,995,996],{},"text\u002Fplain"," in the same format, one rule per line, so an export imported with ",[477,999,975],{}," gives back the same rules.",[470,1002,1004],{"className":472,"code":1003,"language":474,"meta":475,"style":475},"curl https:\u002F\u002Fapi.search.zaproo.cloud\u002Fv1\u002Fprojects\u002F$PROJECT_ID\u002Findices\u002F$INDEX_ID\u002Fsynonyms\u002Fexport \\\n  -H \"Authorization: Bearer $ZS_KEY\" > synonyms.txt\n",[477,1005,1006,1023],{"__ignoreMap":475},[480,1007,1008,1010,1012,1014,1016,1018,1021],{"class":482,"line":483},[480,1009,468],{"class":486},[480,1011,497],{"class":493},[480,1013,501],{"class":500},[480,1015,504],{"class":493},[480,1017,507],{"class":500},[480,1019,1020],{"class":493},"\u002Fsynonyms\u002Fexport",[480,1022,514],{"class":513},[480,1024,1025,1027,1029,1031,1033,1036],{"class":482,"line":517},[480,1026,520],{"class":489},[480,1028,523],{"class":493},[480,1030,526],{"class":500},[480,1032,529],{"class":493},[480,1034,1035],{"class":513}," >",[480,1037,1038],{"class":493}," synonyms.txt\n",[337,1040,1042],{"id":1041},"common-mistakes","Common mistakes",[686,1044,1045,1051,1057,1068],{},[371,1046,1047,1050],{},[375,1048,1049],{},"A synonym seems to do nothing."," Check that the target word is in a searched field of the profile. A synonym only adds words to the query; it cannot find a product whose searched fields hold none of them.",[371,1052,1053,1056],{},[375,1054,1055],{},"Using equivalent rules for related, not equal, words."," \"carton, cardboard box\" is fine. \"tape, tape dispenser\" makes a search for tape show dispensers. Keep equivalent rules for words that mean the same thing, and use one way where only one direction holds.",[371,1058,1059,1062,1063,1067],{},[375,1060,1061],{},"Adding misspellings."," With ",[349,1064,1066],{"href":1065},"\u002Fdocs\u002Fsearch\u002Fprofiles#typos-allowed-per-word","typo tolerance"," on, \"cardbord\" already finds \"cardboard\". Add a synonym for a different word, not for a typo.",[371,1069,1070,1073],{},[375,1071,1072],{},"Importing with replace by accident."," Replace deletes the rules that are not in the text. Export first and keep the file.",[337,1075,1077],{"id":1076},"related","Related",[686,1079,1080,1086,1092,1098],{},[371,1081,1082,1085],{},[349,1083,212],{"href":1084},"\u002Fdocs\u002Fsearch\u002Fprofiles#search-fields",": the fields a synonym has to reach.",[371,1087,1088,1091],{},[349,1089,1090],{"href":1065},"Typo tolerance",": typos need no synonym.",[371,1093,1094,1097],{},[349,1095,230],{"href":1096},"\u002Fdocs\u002Fsearch\u002Frules#searches",": rules match synonyms too.",[371,1099,1100,1102],{},[349,1101,260],{"href":261},": find the searches that need a synonym.",[1104,1105,1106],"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 .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":475,"searchDepth":517,"depth":517,"links":1108},[1109,1110,1111,1115,1116,1117,1118,1122,1123],{"id":339,"depth":517,"text":340},{"id":355,"depth":517,"text":356},{"id":620,"depth":517,"text":400,"children":1112},[1113,1114],{"id":630,"depth":540,"text":391},{"id":700,"depth":540,"text":395},{"id":770,"depth":517,"text":771},{"id":796,"depth":517,"text":797},{"id":828,"depth":517,"text":591},{"id":883,"depth":517,"text":884,"children":1119},[1120,1121],{"id":905,"depth":540,"text":906},{"id":948,"depth":540,"text":949},{"id":1041,"depth":517,"text":1042},{"id":1076,"depth":517,"text":1077},"md",{},{"icon":228},{"title":224,"description":227},"j8j0uXCf0DeZcVY8L3MCjSYMGrLP5AfaQlX5HUBarBE",[1130,1131],{"title":218,"path":219,"stem":220,"description":221,"icon":222,"children":-1},{"title":230,"path":231,"stem":232,"description":233,"icon":234,"children":-1},1793717706320]