[{"data":1,"prerenderedAt":1877},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Fsearch\u002Frules":319,"docs-\u002Fdocs\u002Fsearch\u002Frules-surround":1874},[4],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Docs","\u002Fdocs","docs",[9,35,60,78,120,186,229,240,264,289],{"title":10,"description":11,"icon":12,"path":13,"stem":14,"children":15,"page":34},"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],{"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","From a new account to a first search request in six steps, with curl or from your AI agent.","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",false,{"title":36,"description":37,"icon":38,"path":39,"stem":40,"children":41,"page":34},"Account and team","Sign-in, sessions, organizations, members, roles and projects.","i-lucide-users","\u002Fdocs\u002Faccount","docs\u002F2.account",[42,48,54],{"title":43,"path":44,"stem":45,"description":46,"icon":47},"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":49,"path":50,"stem":51,"description":52,"icon":53},"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":55,"path":56,"stem":57,"description":58,"icon":59},"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":61,"description":62,"icon":63,"path":64,"stem":65,"children":66,"page":34},"API keys and security","Secret and public keys, scopes, allowed origins, rate limits and errors.","i-lucide-key-round","\u002Fdocs\u002Fkeys","docs\u002F3.keys",[67,72],{"title":68,"path":69,"stem":70,"description":71,"icon":63},"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":73,"path":74,"stem":75,"description":76,"icon":77},"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":79,"description":80,"icon":81,"path":82,"stem":83,"children":84,"page":34},"Indexing","Indices, languages, mappings, documents, tasks, full catalog sync and reindexing.","i-lucide-database","\u002Fdocs\u002Findexing","docs\u002F4.indexing",[85,90,96,102,108,114],{"title":86,"path":87,"stem":88,"description":89,"icon":81},"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":91,"path":92,"stem":93,"description":94,"icon":95},"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":97,"path":98,"stem":99,"description":100,"icon":101},"Documents and tasks","\u002Fdocs\u002Findexing\u002Fdocuments","docs\u002F4.indexing\u002F3.documents","Upload and delete documents in batches, follow each write as a task, retry safely with Idempotency-Key, and browse what the index holds.","i-lucide-file-json",{"title":103,"path":104,"stem":105,"description":106,"icon":107},"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":109,"path":110,"stem":111,"description":112,"icon":113},"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":115,"path":116,"stem":117,"description":118,"icon":119},"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":121,"description":122,"icon":123,"path":124,"stem":125,"children":126,"page":34},"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",[127,133,139,144,150,156,161,166,171,176,181],{"title":128,"path":129,"stem":130,"description":131,"icon":132},"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 an integration shows up in the cabinet.","i-lucide-layout-grid",{"title":134,"path":135,"stem":136,"description":137,"icon":138},"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":140,"path":141,"stem":142,"description":143,"icon":119},"Product feed","\u002Fdocs\u002Fintegrations\u002Fproduct-feed","docs\u002F4.integrations\u002F03.product-feed","Connect any shop that can publish its catalog as a feed. Zaproo downloads it on a schedule and writes only what changed.",{"title":145,"path":146,"stem":147,"description":148,"icon":149},"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":151,"path":152,"stem":153,"description":154,"icon":155},"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":157,"path":158,"stem":159,"description":160,"icon":155},"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":162,"path":163,"stem":164,"description":165,"icon":155},"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":167,"path":168,"stem":169,"description":170,"icon":155},"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":172,"path":173,"stem":174,"description":175,"icon":155},"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":177,"path":178,"stem":179,"description":180,"icon":155},"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":182,"path":183,"stem":184,"description":185,"icon":155},"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":187,"description":188,"icon":189,"path":190,"stem":191,"children":192,"page":34},"Search and relevance","The search API, search profiles, facets, synonyms and ranking rules.","i-lucide-search","\u002Fdocs\u002Fsearch","docs\u002F5.search",[193,199,205,211,217,223],{"title":194,"path":195,"stem":196,"description":197,"icon":198},"Search API","\u002Fdocs\u002Fsearch\u002Fsearch-api","docs\u002F5.search\u002F1.search-api","The search request and response, every filter form, sorting, paging, highlighting and the inline profile for previews.","i-lucide-search-code",{"title":200,"path":201,"stem":202,"description":203,"icon":204},"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":206,"path":207,"stem":208,"description":209,"icon":210},"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":212,"path":213,"stem":214,"description":215,"icon":216},"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":218,"path":219,"stem":220,"description":221,"icon":222},"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":224,"path":225,"stem":226,"description":227,"icon":228},"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":230,"description":231,"icon":232,"path":233,"stem":234,"children":235,"page":34},"Autocomplete","Query suggestions as the shopper types.","i-lucide-text-cursor-input","\u002Fdocs\u002Fautocomplete","docs\u002F6.autocomplete",[236],{"title":230,"path":237,"stem":238,"description":239,"icon":232},"\u002Fdocs\u002Fautocomplete\u002Fsuggestions","docs\u002F6.autocomplete\u002F1.suggestions","Query suggestions as the shopper types, built every hour from your own searches, field values and custom entries.",{"title":241,"description":242,"icon":243,"path":244,"stem":245,"children":246,"page":34},"Analytics","Searches, zero-result queries and latency.","i-lucide-chart-line","\u002Fdocs\u002Fanalytics","docs\u002F7.analytics",[247,252,258],{"title":248,"path":249,"stem":250,"description":251,"icon":243},"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":253,"path":254,"stem":255,"description":256,"icon":257},"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":259,"path":260,"stem":261,"description":262,"icon":263},"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":265,"description":266,"icon":267,"path":268,"stem":269,"children":270,"page":34},"AI agents (MCP)","Connect Claude Code or any MCP client and manage search from an agent.","i-lucide-bot","\u002Fdocs\u002Fmcp","docs\u002F8.mcp",[271,277,283],{"title":272,"path":273,"stem":274,"description":275,"icon":276},"MCP setup","\u002Fdocs\u002Fmcp\u002Fsetup","docs\u002F8.mcp\u002F1.setup","Connect Claude Code or any MCP client to Zaproo Search and manage indices, documents, profiles, synonyms and ranking rules from your agent.","i-lucide-plug",{"title":278,"path":279,"stem":280,"description":281,"icon":282},"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":284,"path":285,"stem":286,"description":287,"icon":288},"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":290,"description":291,"icon":292,"path":293,"stem":294,"children":295,"page":34},"Reference","Every REST route, every limit, plans and billing, and status.","i-lucide-book-open","\u002Fdocs\u002Freference","docs\u002F9.reference",[296,302,307,313],{"title":297,"path":298,"stem":299,"description":300,"icon":301},"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":303,"path":304,"stem":305,"description":306,"icon":77},"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":308,"path":309,"stem":310,"description":311,"icon":312},"Plans and billing","\u002Fdocs\u002Freference\u002Fbilling","docs\u002F9.reference\u002F3.billing","The plans, how usage is measured, what happens near a quota, and how plan changes and invoices work.","i-lucide-credit-card",{"title":314,"path":315,"stem":316,"description":317,"icon":318},"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":320,"title":218,"body":321,"description":221,"extension":1869,"meta":1870,"navigation":1871,"path":219,"seo":1872,"stem":220,"__hash__":1873},"docs\u002Fdocs\u002F5.search\u002F5.rules.md",{"type":322,"value":323,"toc":1838},"minimark",[324,329,347,355,358,373,376,379,390,395,401,477,481,488,495,499,502,515,523,527,542,613,616,620,626,630,637,652,656,667,765,809,940,998,1066,1070,1074,1096,1100,1110,1114,1125,1129,1142,1145,1148,1231,1245,1249,1268,1274,1300,1388,1391,1394,1438,1441,1445,1448,1465,1468,1557,1561,1565,1568,1571,1574,1577,1580,1604,1726,1789,1793,1834],[325,326,328],"h2",{"id":327},"what-a-rule-is","What a rule is",[330,331,332,333,337,338,342,343,346],"p",{},"A ranking rule changes the results of chosen searches. \"When someone searches for ",[334,335,336],"em",{},"katus",", put these three roofing sheets first.\" \"During the autumn sale, lift the brand Eterniit on every search.\" A rule has a ",[339,340,341],"strong",{},"when"," (the searches it fires for) and a ",[339,344,345],{},"then"," (one or more actions).",[330,348,349],{},[350,351],"img",{"alt":352,"src":353,"title":354},"The Rules page with a try a search box showing that one rule applies to tape, and two rules: tape pin 2 products, live, and Christmas packaging, scheduled","\u002Fdocs\u002Fscreenshots\u002Frules-list.png","The rules list, with a search to see which rules apply",[330,356,357],{},"Rules and profiles do different jobs:",[359,360,361,370],"ul",{},[362,363,364,365,369],"li",{},"A ",[366,367,368],"a",{"href":201},"search profile"," sets how every search of one search box works: the fields, the typo tolerance, the facets and the sorts.",[362,371,372],{},"A rule changes a few searches, or every search for a while, without touching the profile. Merchandisers can add and remove rules for campaigns while the profile stays the same.",[330,374,375],{},"If a change should hold for every search, all the time, change the profile. If it is about particular words, particular listing pages or a date range, write a rule.",[330,377,378],{},"Rules belong to an index. They run on every profile of it unless you limit them to some profiles. A saved change applies from the next search on, with no reindex.",[330,380,381,382,385,386,389],{},"In the cabinet, open an index and then ",[339,383,384],{},"Rules",". The list shows each rule as a sentence, such as \"Search is katus · Pin 3 products · All profiles\", with its status and an on\u002Foff switch. ",[339,387,388],{},"Try a search"," at the top shows which rules fire for a search you type.",[391,392,394],"h3",{"id":393},"templates","Templates",[330,396,397,400],{},[339,398,399],{},"New rule"," offers a starting point. Every template can be changed before you save.",[402,403,404,417],"table",{},[405,406,407],"thead",{},[408,409,410,414],"tr",{},[411,412,413],"th",{},"Template",[411,415,416],{},"What it sets up",[418,419,420,429,437,445,453,461,469],"tbody",{},[408,421,422,426],{},[423,424,425],"td",{},"Feature products for a search",[423,427,428],{},"Put chosen products first when people search for a word.",[408,430,431,434],{},[423,432,433],{},"Promote a brand or category",[423,435,436],{},"Lift a brand or category higher in the results.",[408,438,439,442],{},[423,440,441],{},"Push down products",[423,443,444],{},"Move a brand or category lower without hiding it.",[408,446,447,450],{},[423,448,449],{},"Send a search to a category",[423,451,452],{},"Show only one category for a search.",[408,454,455,458],{},[423,456,457],{},"Hide products from a search",[423,459,460],{},"Keep chosen products out of the results for a search.",[408,462,463,466],{},[423,464,465],{},"Campaign for every search",[423,467,468],{},"Lift products on every search for a week. The dates start at the current hour.",[408,470,471,474],{},[423,472,473],{},"Start from scratch",[423,475,476],{},"An empty rule: pick the searches and actions yourself.",[325,478,480],{"id":479},"when-it-fires","When it fires",[330,482,483,484,487],{},"The editor's ",[339,485,486],{},"When someone searches for"," block holds the conditions. A rule fires when the search matches one of its phrases, and the request carries the filters of its filtered pages, if it has any.",[330,489,490],{},[350,491],{"alt":492,"src":493,"title":494},"The rule editor for tape with a match of exactly, the search tape, and a preview where the two pinned products come first","\u002Fdocs\u002Fscreenshots\u002Frule-editor.png","The rule editor with its live preview",[391,496,498],{"id":497},"searches","Searches",[330,500,501],{},"The phrases the rule fires for, up to 100 of 1 to 200 characters each. Any one of them is enough. Phrases and searches are compared after the same clean-up:",[359,503,504,507,510],{},[362,505,506],{},"Capital letters and accents do not matter: \"karcher\" matches \"Kärcher\".",[362,508,509],{},"Anything that is not a letter or a digit counts as a space, and repeated spaces count as one: \"t-shirt\" matches \"t shirt\".",[362,511,512,514],{},[366,513,212],{"href":213}," count too. A rule for \"tv\" also fires for \"telly\" when the two are synonyms.",[330,516,517,518,522],{},"If the profile searched a corrected spelling after ",[366,519,521],{"href":520},"\u002Fdocs\u002Fsearch\u002Fprofiles#did-you-mean","did you mean",", rules match the corrected query.",[391,524,526],{"id":525},"match","Match",[330,528,529,530,533,534,537,538,541],{},"How a phrase is compared with the whole search. The cabinet calls the three options ",[339,531,532],{},"exactly",", ",[339,535,536],{},"anything containing"," and ",[339,539,540],{},"anything starting with",".",[402,543,544,562],{},[405,545,546],{},[408,547,548,553,556,559],{},[411,549,550],{},[551,552,525],"code",{},[411,554,555],{},"Fires when",[411,557,558],{},"Phrase \"kast\" fires for",[411,560,561],{},"Does not fire for",[418,563,564,581,597],{},[408,565,566,572,575,578],{},[423,567,568,571],{},[551,569,570],{},"is"," (default)",[423,573,574],{},"the search is the phrase",[423,576,577],{},"\"kast\", \"Kast!\"",[423,579,580],{},"\"kast 50l\", \"kastekann\"",[408,582,583,588,591,594],{},[423,584,585],{},[551,586,587],{},"contains",[423,589,590],{},"the phrase appears as whole words anywhere",[423,592,593],{},"\"kast\", \"plastic kast 50l\"",[423,595,596],{},"\"kastekann\"",[408,598,599,604,607,610],{},[423,600,601],{},[551,602,603],{},"startsWith",[423,605,606],{},"the search begins with the phrase as whole words",[423,608,609],{},"\"kast\", \"kast 50l\"",[423,611,612],{},"\"plastic kast\", \"kastekann\"",[330,614,615],{},"All three compare whole words. \"kast\" never fires for \"kastekann\", because \"kastekann\" is a different word.",[391,617,619],{"id":618},"every-search","Every search",[330,621,622,623,625],{},"A rule with no phrases fires on every search, the empty query on a category page included. In the editor, turn on ",[339,624,619],{},". Use it for campaigns, together with a schedule.",[391,627,629],{"id":628},"only-on-filtered-pages","Only on filtered pages",[330,631,632,633,636],{},"Under ",[339,634,635],{},"Only on filtered pages (advanced)",", a rule can require filters in the request. This is for brand or category listing pages. The rule fires only when the shopper's search is filtered like this.",[359,638,639,649],{},[362,640,641,642,645,646,541],{},"A value or a list fires when the request filters that field with at least these values. A condition ",[551,643,644],{},"{\"brand\": \"Eterniit\"}"," holds for a request with ",[551,647,648],{},"{\"brand\": [\"Eterniit\", \"Ruukki\"]}",[362,650,651],{},"A range, an exists check or category nodes must equal the request's filter exactly. Write the condition the way your storefront sends the filter.",[325,653,655],{"id":654},"actions","Actions",[330,657,658,659,662,663,666],{},"The ",[339,660,661],{},"Then"," block holds 1 to 10 actions. ",[339,664,665],{},"Add an action"," offers the five kinds below.",[668,669,673,677,684,737,740,755],"setting",{"name":670,"type":671,"values":672},"pin","action","1 to 24 products",[391,674,676],{"id":675},"put-products-first","Put products first",[330,678,679,680,683],{},"Chosen products lead the results, in your order. In the editor, pick them with the product search and drag them into order. Each pinned hit carries ",[551,681,682],{},"_pinned: true"," in the response.",[685,686,691],"pre",{"className":687,"code":688,"language":689,"meta":690,"style":690},"language-json shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","{ \"type\": \"pin\", \"ids\": [\"sheet-120\", \"sheet-80\", \"ridge-1\"] }\n","json","",[551,692,693],{"__ignoreMap":690},[694,695,698,702,706,709,713,715,718,721,724,726,729,731,734],"span",{"class":696,"line":697},"line",1,[694,699,701],{"class":700},"s7iLA","{ ",[694,703,705],{"class":704},"sb7M8","\"type\"",[694,707,708],{"class":700},": ",[694,710,712],{"class":711},"semJd","\"pin\"",[694,714,533],{"class":700},[694,716,717],{"class":704},"\"ids\"",[694,719,720],{"class":700},": [",[694,722,723],{"class":711},"\"sheet-120\"",[694,725,533],{"class":700},[694,727,728],{"class":711},"\"sheet-80\"",[694,730,533],{"class":700},[694,732,733],{"class":711},"\"ridge-1\"",[694,735,736],{"class":700},"] }\n",[330,738,739],{},"A pinned product shows even when it does not match the search words. It still has to pass every filter: the profile's filters and exclusions, the rule filters, and the shopper's facet clicks.",[741,742,743],"template",{"v-slot:tips":690},[359,744,745,752],{},[362,746,747,748,541],{},"Pins only apply when results are ordered by relevance. See ",[366,749,751],{"href":750},"#pins-sorting-and-facets","Pins, sorting and facets",[362,753,754],{},"Pin few products. Shoppers read the first row; 3 to 6 pins usually beat 24.",[741,756,757],{"v-slot:related":690},[359,758,759],{},[362,760,761],{},[366,762,764],{"href":763},"#hide-products","Hide products",[668,766,769,772,775,802],{"name":767,"type":671,"values":768},"hide","1 to 500 products",[391,770,764],{"id":771},"hide-products",[330,773,774],{},"Chosen products never show for these searches. Hiding beats pinning. A product that one rule hides and another pins stays hidden.",[685,776,778],{"className":687,"code":777,"language":689,"meta":690,"style":690},"{ \"type\": \"hide\", \"ids\": [\"sheet-old-2019\"] }\n",[551,779,780],{"__ignoreMap":690},[694,781,782,784,786,788,791,793,795,797,800],{"class":696,"line":697},[694,783,701],{"class":700},[694,785,705],{"class":704},[694,787,708],{"class":700},[694,789,790],{"class":711},"\"hide\"",[694,792,533],{"class":700},[694,794,717],{"class":704},[694,796,720],{"class":700},[694,798,799],{"class":711},"\"sheet-old-2019\"",[694,801,736],{"class":700},[741,803,804],{"v-slot:tips":690},[359,805,806],{},[362,807,808],{},"To hide a whole brand or category from one storefront for every search, an exclusion in the profile is simpler than a rule.",[668,810,813,817,824,827,881,927],{"name":811,"type":671,"values":812},"boost","factor 0.1 to 10",[391,814,816],{"id":815},"lift-or-lower-products","Lift or lower products",[330,818,819,820,823],{},"Moves a brand, a category or any product group up or down. The relevance of every product that matches the filters is multiplied by ",[551,821,822],{},"factor",". Above 1 lifts, below 1 lowers.",[330,825,826],{},"The editor offers named steps and a custom value:",[402,828,829,839],{},[405,830,831],{},[408,832,833,836],{},[411,834,835],{},"Step",[411,837,838],{},"Factor",[418,840,841,849,857,865,873],{},[408,842,843,846],{},[423,844,845],{},"Lower a lot",[423,847,848],{},"0.3",[408,850,851,854],{},[423,852,853],{},"Lower",[423,855,856],{},"0.6",[408,858,859,862],{},[423,860,861],{},"Lift",[423,863,864],{},"2",[408,866,867,870],{},[423,868,869],{},"Lift a lot",[423,871,872],{},"5",[408,874,875,878],{},[423,876,877],{},"Custom",[423,879,880],{},"any value from 0.1 to 10",[685,882,884],{"className":687,"code":883,"language":689,"meta":690,"style":690},"{ \"type\": \"boost\", \"filters\": { \"brand\": \"Eterniit\" }, \"factor\": 2 }\n",[551,885,886],{"__ignoreMap":690},[694,887,888,890,892,894,897,899,902,905,908,910,913,916,919,921,924],{"class":696,"line":697},[694,889,701],{"class":700},[694,891,705],{"class":704},[694,893,708],{"class":700},[694,895,896],{"class":711},"\"boost\"",[694,898,533],{"class":700},[694,900,901],{"class":704},"\"filters\"",[694,903,904],{"class":700},": { ",[694,906,907],{"class":704},"\"brand\"",[694,909,708],{"class":700},[694,911,912],{"class":711},"\"Eterniit\"",[694,914,915],{"class":700}," }, ",[694,917,918],{"class":704},"\"factor\"",[694,920,708],{"class":700},[694,922,864],{"class":923},"ssYy9",[694,925,926],{"class":700}," }\n",[741,928,929],{"v-slot:tips":690},[359,930,931,934,937],{},[362,932,933],{},"A lift is not a pin. A lifted product that matches the search badly can still rank below a good match. Use a pin to put a product first for sure.",[362,935,936],{},"Several boosts multiply for a product that matches more than one, up to 100 times in total.",[362,938,939],{},"Boosts change relevance, so they have no effect when the shopper sorts by price or another field.",[668,941,943,947,950,988],{"name":942,"type":671},"filter",[391,944,946],{"id":945},"show-only","Show only",[330,948,949],{},"Narrows the results to a brand, category or other group, like a profile filter. Only products that match show for these searches, and facet counts narrow with them.",[685,951,953],{"className":687,"code":952,"language":689,"meta":690,"style":690},"{ \"type\": \"filter\", \"filters\": { \"category\": { \"terms\": [\"Roofing>Sheets\"] } } }\n",[551,954,955],{"__ignoreMap":690},[694,956,957,959,961,963,966,968,970,972,975,977,980,982,985],{"class":696,"line":697},[694,958,701],{"class":700},[694,960,705],{"class":704},[694,962,708],{"class":700},[694,964,965],{"class":711},"\"filter\"",[694,967,533],{"class":700},[694,969,901],{"class":704},[694,971,904],{"class":700},[694,973,974],{"class":704},"\"category\"",[694,976,904],{"class":700},[694,978,979],{"class":704},"\"terms\"",[694,981,720],{"class":700},[694,983,984],{"class":711},"\"Roofing>Sheets\"",[694,986,987],{"class":700},"] } } }\n",[741,989,990],{"v-slot:tips":690},[359,991,992,995],{},[362,993,994],{},"The \"Send a search to a category\" template uses this action. A search for \"katus\" (Estonian for roof) can show only roofing products, even though \"katus\" also appears in gutter descriptions.",[362,996,997],{},"Filters from several rules all apply. Two rules that show only different brands leave no results.",[668,999,1002,1006,1009,1053],{"name":1000,"type":671,"values":1001},"fieldWeights","weights 0 to 100",[391,1003,1005],{"id":1004},"search-fields-differently","Search fields differently",[330,1007,1008],{},"Gives a field more or less say in the ranking, or stops searching it, for these searches only. A weight replaces the profile's weight for that field. 0 means the field is not searched. In the editor, leave a field empty to keep the profile's weight.",[685,1010,1012],{"className":687,"code":1011,"language":689,"meta":690,"style":690},"{ \"type\": \"fieldWeights\", \"weights\": { \"sku\": 10, \"description\": 0 } }\n",[551,1013,1014],{"__ignoreMap":690},[694,1015,1016,1018,1020,1022,1025,1027,1030,1032,1035,1037,1040,1042,1045,1047,1050],{"class":696,"line":697},[694,1017,701],{"class":700},[694,1019,705],{"class":704},[694,1021,708],{"class":700},[694,1023,1024],{"class":711},"\"fieldWeights\"",[694,1026,533],{"class":700},[694,1028,1029],{"class":704},"\"weights\"",[694,1031,904],{"class":700},[694,1033,1034],{"class":704},"\"sku\"",[694,1036,708],{"class":700},[694,1038,1039],{"class":923},"10",[694,1041,533],{"class":700},[694,1043,1044],{"class":704},"\"description\"",[694,1046,708],{"class":700},[694,1048,1049],{"class":923},"0",[694,1051,1052],{"class":700}," } }\n",[741,1054,1055],{"v-slot:tips":690},[359,1056,1057,1060,1063],{},[362,1058,1059],{},"Useful when one word means two things: a search for \"apple\" in a hardware store can weigh the brand field up and the description down.",[362,1061,1062],{},"When two rules set a weight for the same field, the higher rule in the list wins.",[362,1064,1065],{},"Weights that would leave no field to search are ignored, and the profile's weights apply.",[325,1067,1069],{"id":1068},"when-it-runs","When it runs",[391,1071,1073],{"id":1072},"schedule","Schedule",[330,1075,1076,1079,1080,1083,1084,1087,1088,1091,1092,1095],{},[339,1077,1078],{},"Always"," or ",[339,1081,1082],{},"Between two dates",". A rule with dates is live from ",[551,1085,1086],{},"activeFrom",", included, until ",[551,1089,1090],{},"activeUntil",", not included. Leave one empty for no start or no end. The cabinet shows the times in your time zone; the API takes and returns ISO dates with a time zone, such as ",[551,1093,1094],{},"2026-11-20T00:00:00Z",". The end must be after the start.",[391,1097,1099],{"id":1098},"profiles","Profiles",[330,1101,1102,1105,1106,1109],{},[339,1103,1104],{},"All profiles"," (the default) or ",[339,1107,1108],{},"Chosen profiles",". A rule limited to chosen profiles fires only for searches through those profiles. Deleting a profile removes it from every rule. A rule that is left with no profile is switched off, so that it does not start firing on every profile.",[391,1111,1113],{"id":1112},"skip-the-rules-below","Skip the rules below",[330,1115,1116,1117,1120,1121,1124],{},"With ",[339,1118,1119],{},"Skip the rules below when this one applies"," (",[551,1122,1123],{},"stop","), a firing rule ends the run. Rules lower in the list do not fire for that search.",[391,1126,1128],{"id":1127},"order","Order",[330,1130,1131,1132,537,1135,1138,1139,1141],{},"Rules run from the top of the list to the bottom. In the list, drag a rule, or use ",[339,1133,1134],{},"Move up",[339,1136,1137],{},"Move down"," in its menu. Clear the list's search and status filter to change the order. Order matters for three things: the order in which pins from several rules appear, which rule's field weight wins, and where a ",[551,1140,1123],{}," rule ends the run.",[325,1143,314],{"id":1144},"status",[330,1146,1147],{},"Each rule shows one status:",[402,1149,1150,1164],{},[405,1151,1152],{},[408,1153,1154,1156,1161],{},[411,1155,314],{},[411,1157,1158],{},[551,1159,1160],{},"ruleStatus",[411,1162,1163],{},"Meaning",[418,1165,1166,1179,1192,1205,1218],{},[408,1167,1168,1171,1176],{},[423,1169,1170],{},"Live",[423,1172,1173],{},[551,1174,1175],{},"live",[423,1177,1178],{},"On, and firing for matching searches.",[408,1180,1181,1184,1189],{},[423,1182,1183],{},"Scheduled",[423,1185,1186],{},[551,1187,1188],{},"scheduled",[423,1190,1191],{},"On, and its start date is still ahead.",[408,1193,1194,1197,1202],{},[423,1195,1196],{},"Ended",[423,1198,1199],{},[551,1200,1201],{},"ended",[423,1203,1204],{},"On, but its end date has passed.",[408,1206,1207,1210,1215],{},[423,1208,1209],{},"Off",[423,1211,1212],{},[551,1213,1214],{},"off",[423,1216,1217],{},"Switched off.",[408,1219,1220,1223,1228],{},[423,1221,1222],{},"Needs attention",[423,1224,1225],{},[551,1226,1227],{},"attention",[423,1229,1230],{},"On, but a field it uses no longer fits the mapping. Search skips the rule until you fix it.",[330,1232,1233,1234,1237,1238,1240,1241,1244],{},"A rule needs attention when the mapping changed after it was saved. For example, a boost filters on ",[551,1235,1236],{},"brand",", and ",[551,1239,1236],{}," is no longer filterable or facetable. The rule's ",[551,1242,1243],{},"issues"," list says which field and why.",[325,1246,1248],{"id":1247},"preview-and-test","Preview and test",[330,1250,483,1251,1254,1255,533,1258,533,1261,1079,1264,1267],{},[339,1252,1253],{},"Preview"," runs a search through a profile you pick, with the draft rule, before you save it. It shows the results with the rule and marks how each product moved compared with today's results: ",[339,1256,1257],{},"Pinned 1",[339,1259,1260],{},"↑ 3",[339,1262,1263],{},"↓ 2",[339,1265,1266],{},"New",". It also names other rules that fire for the same search.",[1269,1270],"api-route",{"auth":1271,"method":1272,"path":1273},"Project member or any secret key","POST","\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Frules\u002Ftest",[330,1275,1276,1277,1280,1281,708,1284,1287,1288,1291,1292,1295,1296,1299],{},"The body is a search request plus ",[551,1278,1279],{},"profileId"," (the stored profile to search through) and an optional ",[551,1282,1283],{},"draft",[551,1285,1286],{},"{\"id\": \u003Crule id or none>, \"rule\": \u003Crule>}",". The draft takes the place of the stored rule with that id, or runs last when it has no id. The answer has ",[551,1289,1290],{},"fired"," (the rules that fired, in order), ",[551,1293,1294],{},"results",", and with a draft also ",[551,1297,1298],{},"baseline",", the same search without the draft. Tests are not counted in Analytics.",[685,1301,1305],{"className":1302,"code":1303,"language":1304,"meta":690,"style":690},"language-bash shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","curl -X POST https:\u002F\u002Fapi.zaproo-search.com\u002Fv1\u002Fprojects\u002F$PROJECT_ID\u002Findices\u002F$INDEX_ID\u002Frules\u002Ftest \\\n  -H \"Authorization: Bearer $ZS_KEY\" -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"profileId\": \"'$PROFILE_ID'\", \"q\": \"katus\",\n       \"draft\": {\"rule\": {\"name\": \"Roof sheets first\", \"when\": {\"queries\": [\"katus\"]},\n                          \"then\": [{\"type\": \"pin\", \"ids\": [\"sheet-120\", \"sheet-80\"]}]}}}'\n","bash",[551,1306,1307,1338,1361,1376,1382],{"__ignoreMap":690},[694,1308,1309,1313,1316,1319,1322,1325,1328,1331,1334],{"class":696,"line":697},[694,1310,1312],{"class":1311},"szw1H","curl",[694,1314,1315],{"class":923}," -X",[694,1317,1318],{"class":711}," POST",[694,1320,1321],{"class":711}," https:\u002F\u002Fapi.zaproo-search.com\u002Fv1\u002Fprojects\u002F",[694,1323,1324],{"class":700},"$PROJECT_ID",[694,1326,1327],{"class":711},"\u002Findices\u002F",[694,1329,1330],{"class":700},"$INDEX_ID",[694,1332,1333],{"class":711},"\u002Frules\u002Ftest",[694,1335,1337],{"class":1336},"sklAV"," \\\n",[694,1339,1341,1344,1347,1350,1353,1356,1359],{"class":696,"line":1340},2,[694,1342,1343],{"class":923},"  -H",[694,1345,1346],{"class":711}," \"Authorization: Bearer ",[694,1348,1349],{"class":700},"$ZS_KEY",[694,1351,1352],{"class":711},"\"",[694,1354,1355],{"class":923}," -H",[694,1357,1358],{"class":711}," \"Content-Type: application\u002Fjson\"",[694,1360,1337],{"class":1336},[694,1362,1364,1367,1370,1373],{"class":696,"line":1363},3,[694,1365,1366],{"class":923},"  -d",[694,1368,1369],{"class":711}," '{\"profileId\": \"'",[694,1371,1372],{"class":700},"$PROFILE_ID",[694,1374,1375],{"class":711},"'\", \"q\": \"katus\",\n",[694,1377,1379],{"class":696,"line":1378},4,[694,1380,1381],{"class":711},"       \"draft\": {\"rule\": {\"name\": \"Roof sheets first\", \"when\": {\"queries\": [\"katus\"]},\n",[694,1383,1385],{"class":696,"line":1384},5,[694,1386,1387],{"class":711},"                          \"then\": [{\"type\": \"pin\", \"ids\": [\"sheet-120\", \"sheet-80\"]}]}}}'\n",[325,1389,751],{"id":1390},"pins-sorting-and-facets",[330,1392,1393],{},"Pins apply only when results are ordered by relevance:",[359,1395,1396,1410,1432],{},[362,1397,1398,1401,1402,1405,1406,1409],{},[339,1399,1400],{},"The shopper sorts by a field."," A sort such as ",[551,1403,1404],{},"price:asc"," puts relevance aside, and pins with it. A pinned product shows only if it matches the search, in its place in the price order, and carries no ",[551,1407,1408],{},"_pinned"," flag.",[362,1411,1412,1415,1416,1420,1421,1423,1424,1427,1428,1431],{},[339,1413,1414],{},"The profile has always-show-first clauses."," Pins apply when, after the profile's ",[366,1417,1419],{"href":1418},"\u002Fdocs\u002Fsearch\u002Fprofiles#always-show-first","pinnedSort"," clauses, the order is by relevance. With ",[551,1422,1419],{}," set to ",[551,1425,1426],{},"inStock:desc"," and the default sort ",[551,1429,1430],{},"_relevance",", pins lead within each group. A pinned product that is out of stock comes after every product in stock.",[362,1433,1434,1437],{},[339,1435,1436],{},"The shopper clicks a facet."," Pins pass through the same filters as every other product. A click on another brand removes a pinned product of a different brand from the results.",[330,1439,1440],{},"Pinned products count in the facets like any other result.",[325,1442,1444],{"id":1443},"how-several-rules-combine","How several rules combine",[330,1446,1447],{},"Every rule that fires adds its actions:",[359,1449,1450,1453,1456,1459,1462],{},[362,1451,1452],{},"Pins join in rule order, without duplicates, up to 24 in total.",[362,1454,1455],{},"Hidden products add up, and a hidden product is never pinned.",[362,1457,1458],{},"Boosts multiply for a product that matches several, up to 100 times in total.",[362,1460,1461],{},"Filters all apply.",[362,1463,1464],{},"For each field, the weight from the highest firing rule wins.",[325,1466,303],{"id":1467},"limits",[402,1469,1470,1480],{},[405,1471,1472],{},[408,1473,1474,1477],{},[411,1475,1476],{},"What",[411,1478,1479],{},"Limit",[418,1481,1482,1494,1502,1509,1517,1525,1533,1541,1549],{},[408,1483,1484,1487],{},[423,1485,1486],{},"Rules per index",[423,1488,1489,1490,1493],{},"1,000 (",[551,1491,1492],{},"409 RULE_LIMIT_REACHED"," above)",[408,1495,1496,1499],{},[423,1497,1498],{},"Phrases per rule",[423,1500,1501],{},"100, each 1 to 200 characters",[408,1503,1504,1507],{},[423,1505,1506],{},"Actions per rule",[423,1508,1039],{},[408,1510,1511,1514],{},[423,1512,1513],{},"Pinned products per action, and per search",[423,1515,1516],{},"24",[408,1518,1519,1522],{},[423,1520,1521],{},"Hidden products per action",[423,1523,1524],{},"500",[408,1526,1527,1530],{},[423,1528,1529],{},"Boost factor",[423,1531,1532],{},"0.1 to 10",[408,1534,1535,1538],{},[423,1536,1537],{},"Field weight",[423,1539,1540],{},"0 to 100",[408,1542,1543,1546],{},[423,1544,1545],{},"Profiles per rule",[423,1547,1548],{},"50",[408,1550,1551,1554],{},[423,1552,1553],{},"Rule name",[423,1555,1556],{},"1 to 100 characters",[325,1558,1560],{"id":1559},"over-the-api-and-mcp","Over the API and MCP",[1269,1562],{"auth":1271,"method":1563,"path":1564},"GET","\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Frules",[1269,1566],{"auth":1567,"method":1272,"path":1564},"Project admin or a full-access secret key",[1269,1569],{"auth":1271,"method":1563,"path":1570},"\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Frules\u002F:ruleId",[1269,1572],{"auth":1567,"method":1573,"path":1570},"PUT",[1269,1575],{"auth":1567,"method":1576,"path":1570},"DELETE",[1269,1578],{"auth":1567,"method":1573,"path":1579},"\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Frules\u002Forder",[330,1581,1582,1584,1585,1587,1588,1591,1592,1595,1596,1599,1600,1603],{},[551,1583,1272],{}," adds the rule at the bottom of the list. ",[551,1586,1573],{}," replaces the whole rule. ",[551,1589,1590],{},"PUT ...\u002Forder"," takes ",[551,1593,1594],{},"{\"ids\": [...]}"," with every rule id of the index exactly once, in the new order, or answers ",[551,1597,1598],{},"400 RULE_ORDER_MISMATCH",". A rule that names a field the mapping does not allow for its use, or a profile of another index, answers ",[551,1601,1602],{},"400 RULE_INVALID"," with one issue per problem.",[1605,1606,1607,1694],"tabs",{},[1608,1609,1611],"tabs-item",{"icon":1610,"label":1312},"i-lucide-terminal",[685,1612,1614],{"className":1302,"code":1613,"language":1304,"meta":690,"style":690},"curl -X POST https:\u002F\u002Fapi.zaproo-search.com\u002Fv1\u002Fprojects\u002F$PROJECT_ID\u002Findices\u002F$INDEX_ID\u002Frules \\\n  -H \"Authorization: Bearer $ZS_KEY\" -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"Autumn sale: Eterniit\",\n    \"when\": {\"queries\": []},\n    \"then\": [{\"type\": \"boost\", \"filters\": {\"brand\": \"Eterniit\"}, \"factor\": 2}],\n    \"activeFrom\": \"2026-11-01T00:00:00Z\",\n    \"activeUntil\": \"2026-11-15T00:00:00Z\"\n  }'\n",[551,1615,1616,1637,1653,1660,1665,1670,1676,1682,1688],{"__ignoreMap":690},[694,1617,1618,1620,1622,1624,1626,1628,1630,1632,1635],{"class":696,"line":697},[694,1619,1312],{"class":1311},[694,1621,1315],{"class":923},[694,1623,1318],{"class":711},[694,1625,1321],{"class":711},[694,1627,1324],{"class":700},[694,1629,1327],{"class":711},[694,1631,1330],{"class":700},[694,1633,1634],{"class":711},"\u002Frules",[694,1636,1337],{"class":1336},[694,1638,1639,1641,1643,1645,1647,1649,1651],{"class":696,"line":1340},[694,1640,1343],{"class":923},[694,1642,1346],{"class":711},[694,1644,1349],{"class":700},[694,1646,1352],{"class":711},[694,1648,1355],{"class":923},[694,1650,1358],{"class":711},[694,1652,1337],{"class":1336},[694,1654,1655,1657],{"class":696,"line":1363},[694,1656,1366],{"class":923},[694,1658,1659],{"class":711}," '{\n",[694,1661,1662],{"class":696,"line":1378},[694,1663,1664],{"class":711},"    \"name\": \"Autumn sale: Eterniit\",\n",[694,1666,1667],{"class":696,"line":1384},[694,1668,1669],{"class":711},"    \"when\": {\"queries\": []},\n",[694,1671,1673],{"class":696,"line":1672},6,[694,1674,1675],{"class":711},"    \"then\": [{\"type\": \"boost\", \"filters\": {\"brand\": \"Eterniit\"}, \"factor\": 2}],\n",[694,1677,1679],{"class":696,"line":1678},7,[694,1680,1681],{"class":711},"    \"activeFrom\": \"2026-11-01T00:00:00Z\",\n",[694,1683,1685],{"class":696,"line":1684},8,[694,1686,1687],{"class":711},"    \"activeUntil\": \"2026-11-15T00:00:00Z\"\n",[694,1689,1691],{"class":696,"line":1690},9,[694,1692,1693],{"class":711},"  }'\n",[1608,1695,1697,1705],{"icon":267,"label":1696},"MCP",[685,1698,1703],{"className":1699,"code":1701,"language":1702,"meta":690},[1700],"language-text","On the products index, when someone searches exactly \"katus\", put sheet-120\nand sheet-80 first. Test it on the Storefront profile before saving.\n","text",[551,1704,1701],{"__ignoreMap":690},[330,1706,1707,1708,1711,1712,1715,1716,533,1719,537,1722,1725],{},"The agent calls ",[551,1709,1710],{},"test_rule"," and then ",[551,1713,1714],{},"upsert_rule",". ",[551,1717,1718],{},"list_rules",[551,1720,1721],{},"delete_rule",[551,1723,1724],{},"reorder_rules"," cover the rest.",[330,1727,1728,1729,533,1732,1120,1735,1738,1739,1120,1741,1744,1745,1747,1748,1120,1751,1738,1753,1120,1755,1758,1759,1120,1762,1738,1765,537,1767,1120,1769,1738,1772,1237,1774,1120,1776,1779,1780,533,1783,1786,1787,541],{},"The fields of a rule, with their defaults: ",[551,1730,1731],{},"name",[551,1733,1734],{},"enabled",[551,1736,1737],{},"true","), ",[551,1740,1098],{},[551,1742,1743],{},"[]",", every profile), ",[551,1746,341],{}," with ",[551,1749,1750],{},"queries",[551,1752,1743],{},[551,1754,525],{},[551,1756,1757],{},"\"is\"",") and ",[551,1760,1761],{},"filters",[551,1763,1764],{},"{}",[551,1766,1086],{},[551,1768,1090],{},[551,1770,1771],{},"null",[551,1773,345],{},[551,1775,1123],{},[551,1777,1778],{},"false","). A stored rule also has ",[551,1781,1782],{},"id",[551,1784,1785],{},"position"," (0 runs first) and ",[551,1788,1243],{},[325,1790,1792],{"id":1791},"common-mistakes","Common mistakes",[359,1794,1795,1804,1816,1825],{},[362,1796,1797,1800,1801,1803],{},[339,1798,1799],{},"A pin does not show."," The shopper sorted by a field, the pinned product fails a filter, or another rule hides it. Type the search under ",[339,1802,388],{}," to see which rules fire.",[362,1805,1806,1809,1810,1812,1813,1815],{},[339,1807,1808],{},"A rule fires too often."," ",[551,1811,587],{}," with a short phrase fires on every search with that word. Use ",[551,1814,570],{}," for one-word searches you want to steer.",[362,1817,1818,1821,1822,541],{},[339,1819,1820],{},"A rule never fires on a category page."," Its filtered-page condition uses another form than the storefront sends, such as a list where the storefront sends ",[551,1823,1824],{},"{\"terms\": [...]}",[362,1826,1827,1830,1831,1833],{},[339,1828,1829],{},"A campaign does not end."," It has no end date. Set ",[339,1832,1082],{},", or switch it off when the campaign is over.",[1835,1836,1837],"style",{},"html pre.shiki code .s7iLA, html code.shiki .s7iLA{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html pre.shiki code .sb7M8, html code.shiki .sb7M8{--shiki-light:#024C1A;--shiki-default:#024C1A;--shiki-dark:#72F088}html pre.shiki code .semJd, html code.shiki .semJd{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#ADDCFF}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 .ssYy9, html code.shiki .ssYy9{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#91CBFF}html pre.shiki code .szw1H, html code.shiki .szw1H{--shiki-light:#702C00;--shiki-default:#702C00;--shiki-dark:#FFB757}html pre.shiki code .sklAV, html code.shiki .sklAV{--shiki-light:#A0111F;--shiki-default:#A0111F;--shiki-dark:#FF9492}",{"title":690,"searchDepth":1340,"depth":1340,"links":1839},[1840,1843,1849,1856,1862,1863,1864,1865,1866,1867,1868],{"id":327,"depth":1340,"text":328,"children":1841},[1842],{"id":393,"depth":1363,"text":394},{"id":479,"depth":1340,"text":480,"children":1844},[1845,1846,1847,1848],{"id":497,"depth":1363,"text":498},{"id":525,"depth":1363,"text":526},{"id":618,"depth":1363,"text":619},{"id":628,"depth":1363,"text":629},{"id":654,"depth":1340,"text":655,"children":1850},[1851,1852,1853,1854,1855],{"id":675,"depth":1363,"text":676},{"id":771,"depth":1363,"text":764},{"id":815,"depth":1363,"text":816},{"id":945,"depth":1363,"text":946},{"id":1004,"depth":1363,"text":1005},{"id":1068,"depth":1340,"text":1069,"children":1857},[1858,1859,1860,1861],{"id":1072,"depth":1363,"text":1073},{"id":1098,"depth":1363,"text":1099},{"id":1112,"depth":1363,"text":1113},{"id":1127,"depth":1363,"text":1128},{"id":1144,"depth":1340,"text":314},{"id":1247,"depth":1340,"text":1248},{"id":1390,"depth":1340,"text":751},{"id":1443,"depth":1340,"text":1444},{"id":1467,"depth":1340,"text":303},{"id":1559,"depth":1340,"text":1560},{"id":1791,"depth":1340,"text":1792},"md",{},{"icon":222},{"title":218,"description":221},"_7eGqW2--xSYB-_XVXcjDiVHpOFspMJ9IqivBdaZ1js",[1875,1876],{"title":212,"path":213,"stem":214,"description":215,"icon":216,"children":-1},{"title":224,"path":225,"stem":226,"description":227,"icon":228,"children":-1},1792794344464]