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