[{"data":1,"prerenderedAt":896},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Fsearch\u002Flanguage-groups":331,"docs-\u002Fdocs\u002Fsearch\u002Flanguage-groups-surround":893},[4],{"title":5,"path":6,"stem":7,"children":8,"page":46},"Docs","\u002Fdocs","docs",[9,47,72,90,132,198,241,252,276,301],{"title":10,"description":11,"icon":12,"path":13,"stem":14,"children":15,"page":46},"Getting started","What Zaproo Search is, a quickstart, and wiring search into a storefront.","i-lucide-rocket","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[16,22,28,34,40],{"title":17,"path":18,"stem":19,"description":20,"icon":21},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F1.introduction","What Zaproo Search is, the five things you work with, and how a product catalog becomes a search box on your shop.","i-lucide-book-open-text",{"title":23,"path":24,"stem":25,"description":26,"icon":27},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F1.getting-started\u002F2.quickstart","Set up search for your shop in the cabinet, from a new account to a first search, with the API and MCP as other ways to do the same.","i-lucide-zap",{"title":29,"path":30,"stem":31,"description":32,"icon":33},"Integrate a storefront","\u002Fdocs\u002Fgetting-started\u002Fstorefront","docs\u002F1.getting-started\u002F3.storefront","Build a search results page with facets and an autocomplete box on top of the search and suggest routes.","i-lucide-store",{"title":35,"path":36,"stem":37,"description":38,"icon":39},"JavaScript SDK","\u002Fdocs\u002Fgetting-started\u002Fjavascript-sdk","docs\u002F1.getting-started\u002F4.javascript-sdk","Search, autocomplete and event tracking from a storefront with one small client that runs in the browser, on your server and in edge functions.","i-lucide-braces",{"title":41,"path":42,"stem":43,"description":44,"icon":45},"AI shopping assistant","\u002Fdocs\u002Fgetting-started\u002Fai-assistant","docs\u002F1.getting-started\u002F5.ai-assistant","A chat widget for your storefront that finds products and answers questions from your indexes.","i-lucide-sparkles",false,{"title":48,"description":49,"icon":50,"path":51,"stem":52,"children":53,"page":46},"Account and team","Sign-in, sessions, organizations, members, roles and projects.","i-lucide-users","\u002Fdocs\u002Faccount","docs\u002F2.account",[54,60,66],{"title":55,"path":56,"stem":57,"description":58,"icon":59},"Account and sign-in","\u002Fdocs\u002Faccount\u002Fsign-in","docs\u002F2.account\u002F1.sign-in","Create an account, verify your email, stay signed in, manage signed-in devices and change or reset your password.","i-lucide-log-in",{"title":61,"path":62,"stem":63,"description":64,"icon":65},"Organizations, members and roles","\u002Fdocs\u002Faccount\u002Forganizations","docs\u002F2.account\u002F2.organizations","What an organization holds, how to add members, and what owners, admins and members may do.","i-lucide-building-2",{"title":67,"path":68,"stem":69,"description":70,"icon":71},"Projects","\u002Fdocs\u002Faccount\u002Fprojects","docs\u002F2.account\u002F3.projects","Group the indices and API keys of one shop or one environment, and keep staging apart from production.","i-lucide-folder-kanban",{"title":73,"description":74,"icon":75,"path":76,"stem":77,"children":78,"page":46},"API keys and security","Secret and public keys, scopes, allowed origins, rate limits and errors.","i-lucide-key-round","\u002Fdocs\u002Fkeys","docs\u002F3.keys",[79,84],{"title":80,"path":81,"stem":82,"description":83,"icon":75},"API keys","\u002Fdocs\u002Fkeys\u002Fapi-keys","docs\u002F3.keys\u002F1.api-keys","Secret and public keys, full and read access, index scope, allowed origins, expiry, and how to revoke a key.",{"title":85,"path":86,"stem":87,"description":88,"icon":89},"Rate limits and errors","\u002Fdocs\u002Fkeys\u002Frate-limits","docs\u002F3.keys\u002F2.rate-limits","How many requests each route accepts per minute, what a 429 looks like, the error format and every error code with its HTTP status.","i-lucide-gauge",{"title":91,"description":92,"icon":93,"path":94,"stem":95,"children":96,"page":46},"Indexing","Indices, languages, mappings, documents, tasks, full catalog sync and reindexing.","i-lucide-database","\u002Fdocs\u002Findexing","docs\u002F4.indexing",[97,102,108,114,120,126],{"title":98,"path":99,"stem":100,"description":101,"icon":93},"Indices and languages","\u002Fdocs\u002Findexing\u002Findices","docs\u002F4.indexing\u002F1.indices","Create an index, pick its language, read its status, and change the language later with a reindex.",{"title":103,"path":104,"stem":105,"description":106,"icon":107},"Mapping and fields","\u002Fdocs\u002Findexing\u002Fmapping","docs\u002F4.indexing\u002F2.mapping","Field types, the five flags that decide what a field is used for, text analysis options, unmapped fields, and which changes need a reindex.","i-lucide-table-properties",{"title":109,"path":110,"stem":111,"description":112,"icon":113},"Documents and tasks","\u002Fdocs\u002Findexing\u002Fdocuments","docs\u002F4.indexing\u002F3.documents","Upload, browse and delete documents in the cabinet or through the API, follow each write as a task, and retry safely with Idempotency-Key.","i-lucide-file-json",{"title":115,"path":116,"stem":117,"description":118,"icon":119},"Full catalog sync","\u002Fdocs\u002Findexing\u002Ffull-sync","docs\u002F4.indexing\u002F4.full-sync","Replace the whole catalog with a replace session, so products missing from your export disappear from search, without downtime.","i-lucide-refresh-cw",{"title":121,"path":122,"stem":123,"description":124,"icon":125},"Reindex and versions","\u002Fdocs\u002Findexing\u002Fversions","docs\u002F4.indexing\u002F5.versions","Rebuild an index with its saved mapping and swap it in without downtime, follow or cancel the rebuild, and read activeVersion and buildingVersion.","i-lucide-git-compare-arrows",{"title":127,"path":128,"stem":129,"description":130,"icon":131},"Data source","\u002Fdocs\u002Findexing\u002Fdata-source","docs\u002F4.indexing\u002F6.data-source","Let Zaproo download your product feed on a schedule, map it to documents, write only what changed and delete what left the feed.","i-lucide-rss",{"title":133,"description":134,"icon":135,"path":136,"stem":137,"children":138,"page":46},"Integrations","Connect your shop. Magento 2, product feeds and the API work today; more platforms are coming.","i-lucide-plug-zap","\u002Fdocs\u002Fintegrations","docs\u002F4.integrations",[139,145,151,156,162,168,173,178,183,188,193],{"title":140,"path":141,"stem":142,"description":143,"icon":144},"Integrations overview","\u002Fdocs\u002Fintegrations\u002Foverview","docs\u002F4.integrations\u002F01.overview","The ways to get your catalog into Zaproo Search, which one to pick, and how a connected shop shows up in the cabinet.","i-lucide-layout-grid",{"title":146,"path":147,"stem":148,"description":149,"icon":150},"Magento 2","\u002Fdocs\u002Fintegrations\u002Fmagento","docs\u002F4.integrations\u002F02.magento","Install the Zaproo Search module for Magento 2, connect each store view to its own index, and keep the catalog in sync.","i-lucide-shopping-cart",{"title":152,"path":153,"stem":154,"description":155,"icon":131},"Product feed","\u002Fdocs\u002Fintegrations\u002Fproduct-feed","docs\u002F4.integrations\u002F03.product-feed","Connect any shop that can publish its catalog as a feed. You set it up in the cabinet, and Zaproo downloads the feed on a schedule and writes only what changed.",{"title":157,"path":158,"stem":159,"description":160,"icon":161},"REST API and MCP","\u002Fdocs\u002Fintegrations\u002Frest-api-and-mcp","docs\u002F4.integrations\u002F04.rest-api-and-mcp","Send documents from your own code with the REST API, or let an AI agent manage the index over MCP.","i-lucide-code",{"title":163,"path":164,"stem":165,"description":166,"icon":167},"Shopify","\u002Fdocs\u002Fintegrations\u002Fshopify","docs\u002F4.integrations\u002F05.shopify","A Zaproo Search integration for Shopify is coming soon. Until then, connect the shop through a product feed or the REST API.","i-lucide-shopping-bag",{"title":169,"path":170,"stem":171,"description":172,"icon":167},"WooCommerce","\u002Fdocs\u002Fintegrations\u002Fwoocommerce","docs\u002F4.integrations\u002F06.woocommerce","A Zaproo Search integration for WooCommerce is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":174,"path":175,"stem":176,"description":177,"icon":167},"Shopware","\u002Fdocs\u002Fintegrations\u002Fshopware","docs\u002F4.integrations\u002F07.shopware","A Zaproo Search integration for Shopware is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":179,"path":180,"stem":181,"description":182,"icon":167},"BigCommerce","\u002Fdocs\u002Fintegrations\u002Fbigcommerce","docs\u002F4.integrations\u002F08.bigcommerce","A Zaproo Search integration for BigCommerce is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":184,"path":185,"stem":186,"description":187,"icon":167},"PrestaShop","\u002Fdocs\u002Fintegrations\u002Fprestashop","docs\u002F4.integrations\u002F09.prestashop","A Zaproo Search integration for PrestaShop is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":189,"path":190,"stem":191,"description":192,"icon":167},"commercetools","\u002Fdocs\u002Fintegrations\u002Fcommercetools","docs\u002F4.integrations\u002F10.commercetools","A Zaproo Search integration for commercetools is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":194,"path":195,"stem":196,"description":197,"icon":167},"Salesforce Commerce Cloud","\u002Fdocs\u002Fintegrations\u002Fsalesforce-commerce-cloud","docs\u002F4.integrations\u002F11.salesforce-commerce-cloud","A Zaproo Search integration for Salesforce Commerce Cloud is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":199,"description":200,"icon":201,"path":202,"stem":203,"children":204,"page":46},"Search and relevance","The search API, search profiles, facets, synonyms and ranking rules.","i-lucide-search","\u002Fdocs\u002Fsearch","docs\u002F5.search",[205,211,217,223,229,235],{"title":206,"path":207,"stem":208,"description":209,"icon":210},"Search API","\u002Fdocs\u002Fsearch\u002Fsearch-api","docs\u002F5.search\u002F1.search-api","Try a search in the playground, then the search request and response for developers, with every filter form, sorting, paging, highlighting and the inline profile.","i-lucide-search-code",{"title":212,"path":213,"stem":214,"description":215,"icon":216},"Search profiles","\u002Fdocs\u002Fsearch\u002Fprofiles","docs\u002F5.search\u002F2.profiles","Every setting of a search profile, what it does to results, and the mistakes to avoid.","i-lucide-sliders-horizontal",{"title":218,"path":219,"stem":220,"description":221,"icon":222},"Facets","\u002Fdocs\u002Fsearch\u002Ffacets","docs\u002F5.search\u002F3.facets","The filter panels next to the results, the four facet types, index facets and profile facets, and how a shopper's clicks change the counts.","i-lucide-list-filter",{"title":224,"path":225,"stem":226,"description":227,"icon":228},"Synonyms","\u002Fdocs\u002Fsearch\u002Fsynonyms","docs\u002F5.search\u002F4.synonyms","Let different words find the same products, with equivalent and one-way rules, bulk import and export in the Solr format, and no reindex.","i-lucide-arrow-left-right",{"title":230,"path":231,"stem":232,"description":233,"icon":234},"Ranking rules","\u002Fdocs\u002Fsearch\u002Frules","docs\u002F5.search\u002F5.rules","Change the results for chosen searches. Put products first, hide them, lift or lower a brand, narrow the results or weigh fields differently, on a schedule and per profile.","i-lucide-list-ordered",{"title":236,"path":237,"stem":238,"description":239,"icon":240},"Language groups","\u002Fdocs\u002Fsearch\u002Flanguage-groups","docs\u002F5.search\u002F6.language-groups","Let each store of a multilingual shop find its products by the other stores' text, so an English search on the Estonian store still finds the Estonian product.","i-lucide-languages",{"title":242,"description":243,"icon":244,"path":245,"stem":246,"children":247,"page":46},"Autocomplete","Query suggestions as the shopper types.","i-lucide-text-cursor-input","\u002Fdocs\u002Fautocomplete","docs\u002F6.autocomplete",[248],{"title":242,"path":249,"stem":250,"description":251,"icon":244},"\u002Fdocs\u002Fautocomplete\u002Fsuggestions","docs\u002F6.autocomplete\u002F1.suggestions","Set up query suggestions in the cabinet. They are built every hour from your shoppers' searches, field values and custom entries.",{"title":253,"description":254,"icon":255,"path":256,"stem":257,"children":258,"page":46},"Analytics","Searches, zero-result queries and latency.","i-lucide-chart-line","\u002Fdocs\u002Fanalytics","docs\u002F7.analytics",[259,264,270],{"title":260,"path":261,"stem":262,"description":263,"icon":255},"Search analytics","\u002Fdocs\u002Fanalytics\u002Fsearch-analytics","docs\u002F7.analytics\u002F1.search-analytics","What the analytics page counts, which traffic it leaves out, how the headline numbers are defined, how comparisons and retention work, and how to get the weekly digest.",{"title":265,"path":266,"stem":267,"description":268,"icon":269},"Reports","\u002Fdocs\u002Fanalytics\u002Freports","docs\u002F7.analytics\u002F2.reports","Every analytics report with the definition of each column, the opportunities list and its fix buttons, the per-query view with before and after, and the CSV download.","i-lucide-table",{"title":271,"path":272,"stem":273,"description":274,"icon":275},"Event tracking","\u002Fdocs\u002Fanalytics\u002Fevent-tracking","docs\u002F7.analytics\u002F3.event-tracking","Send clicks, add-to-cart, purchases and suggestion clicks from your storefront, tie them to the search with searchId, and a copy-paste script that does it.","i-lucide-mouse-pointer-click",{"title":277,"description":278,"icon":279,"path":280,"stem":281,"children":282,"page":46},"AI agents (MCP)","Connect Claude Code or any MCP client and manage search from an agent.","i-lucide-bot","\u002Fdocs\u002Fmcp","docs\u002F8.mcp",[283,289,295],{"title":284,"path":285,"stem":286,"description":287,"icon":288},"MCP setup","\u002Fdocs\u002Fmcp\u002Fsetup","docs\u002F8.mcp\u002F1.setup","Connect Claude Code or another MCP client to your project from the cabinet's MCP connection page, and let an agent manage indices, documents, profiles, synonyms and rules.","i-lucide-plug",{"title":290,"path":291,"stem":292,"description":293,"icon":294},"MCP tools","\u002Fdocs\u002Fmcp\u002Ftools","docs\u002F8.mcp\u002F2.tools","Every tool the Zaproo Search MCP server offers, what an agent can do with each group, and prompts to start from.","i-lucide-wrench",{"title":296,"path":297,"stem":298,"description":299,"icon":300},"Resources and prompts","\u002Fdocs\u002Fmcp\u002Fresources","docs\u002F8.mcp\u002F3.resources","The index resources an MCP client can read, the tune_relevance prompt, and the errors the MCP server answers.","i-lucide-library",{"title":302,"description":303,"icon":304,"path":305,"stem":306,"children":307,"page":46},"Reference","Every REST route, every limit, plans and billing, and status.","i-lucide-book-open","\u002Fdocs\u002Freference","docs\u002F9.reference",[308,314,319,325],{"title":309,"path":310,"stem":311,"description":312,"icon":313},"REST API","\u002Fdocs\u002Freference\u002Frest-api","docs\u002F9.reference\u002F1.rest-api","The routes of the Zaproo Search REST API, grouped by area, with who may call it.","i-lucide-list-tree",{"title":315,"path":316,"stem":317,"description":318,"icon":89},"Limits","\u002Fdocs\u002Freference\u002Flimits","docs\u002F9.reference\u002F2.limits","Every size limit, cap and default of the Zaproo Search API in one place, with what happens when you reach it.",{"title":320,"path":321,"stem":322,"description":323,"icon":324},"Plans and billing","\u002Fdocs\u002Freference\u002Fbilling","docs\u002F9.reference\u002F3.billing","Check your plan and usage on the Billing & usage page, change the plan, download invoices, and see how quotas and proration work.","i-lucide-credit-card",{"title":326,"path":327,"stem":328,"description":329,"icon":330},"Status","\u002Fdocs\u002Freference\u002Fstatus","docs\u002F9.reference\u002F4.status","The status page and the status route, what each service covers and how to use them in your own monitoring.","i-lucide-activity",{"id":332,"title":236,"body":333,"description":239,"extension":888,"meta":889,"navigation":890,"path":237,"seo":891,"stem":238,"__hash__":892},"docs\u002Fdocs\u002F5.search\u002F6.language-groups.md",{"type":334,"value":335,"toc":872},"minimark",[336,341,345,348,351,355,364,429,436,454,457,470,499,510,528,531,553,568,575,598,618,623,626,685,689,692,695,699,715,764,768,771,775,785,796,799,806,824,835,839,868],[337,338,340],"h2",{"id":339},"what-a-language-group-does","What a language group does",[342,343,344],"p",{},"Many shops run one storefront per language. A Magento shop with Estonian, English and Russian store views syncs each view into its own index. The products are the same and only the text differs. A shopper on the Estonian store who types \"red dress\" finds nothing, because the Estonian index only holds \"Punane kleit\".",[342,346,347],{},"A language group connects those indices. Each member keeps a copy of the other members' text for the same product, analyzed in the language it was written in. The copies show up as fields in the member's mapping, and each search profile decides how much they count. With the English title in the Estonian store's profile, \"red dress\" on the Estonian store finds Punane kleit. The result still shows the Estonian name, price and URL. Facets, filters, sorting and highlighting use the store's own fields, so nothing from the English store shows up on the Estonian one.",[342,349,350],{},"Search speed does not change: it is still one request to the search engine.",[337,352,354],{"id":353},"create-a-group","Create a group",[342,356,357,358,363],{},"Only organization owners and admins can create, change and delete groups. You need at least two indices in the project, one per store language. API keys and AI agents cannot manage groups, see ",[359,360,362],"a",{"href":361},"#api","API",".",[365,366,367,378,389,400,413,423],"ol",{},[368,369,370,371,374,375,363],"li",{},"Open the project and click ",[372,373,236],"strong",{}," in the project menu, then ",[372,376,377],{},"New group",[368,379,380,381,384,385,363],{},"Enter a ",[372,382,383],{},"Name",", for example ",[386,387,388],"code",{},"Storefronts",[368,390,391,392,395,396,399],{},"Under ",[372,393,394],{},"Indices",", pick one index per store. See ",[359,397,394],{"href":398},"#indices"," below.",[368,401,391,402,405,406,409,410,363],{},[372,403,404],{},"Match products by",", pick the field that is the same for one product in every store. ",[372,407,408],{},"Product id"," fits most shops. See ",[359,411,404],{"href":412},"#match-products-by",[368,414,415,416,419,420,363],{},"Check the ",[372,417,418],{},"Shared fields",": the text the other stores borrow. See ",[359,421,418],{"href":422},"#shared-fields",[368,424,425,426,363],{},"Click ",[372,427,428],{},"Create group",[342,430,431,432,363],{},"The cabinet then asks which search profiles should search the borrowed text. See ",[359,433,435],{"href":434},"#search-the-borrowed-text","Search the borrowed text",[342,437,438,439,442,443,446,447,449,450,453],{},"The table lists each group with its ",[372,440,441],{},"Stores",", what it matches by (",[372,444,445],{},"Match by",") and its ",[372,448,326],{},". ",[372,451,452],{},"Edit"," on a row opens the same form.",[342,455,456],{},"The settings in the form:",[458,459,463,467],"setting",{"name":460,"type":461,"values":462},"indexIds","list of index ids","2 to 10 indices of the project",[464,465,394],"h3",{"id":466},"indices",[342,468,469],{},"Pick one index per store. The list shows each index's language, and two indices with the same language cannot be in one group. An index can be in one group at a time.",[458,471,476,479,492],{"name":472,"type":473,"values":474,"default":475},"join","field name","id, or a keyword field every member can filter on","id",[464,477,404],{"id":478},"match-products-by",[342,480,481,482,484,485,487,488,491],{},"The field whose value is the same for one product in every member. ",[372,483,408],{}," matches documents with the same ",[386,486,475],{},". This is the right choice for Magento, where a product has the same entity id in every store view. When ids differ between stores, pick another field, such as ",[386,489,490],{},"sku",". The list offers only the keyword fields that every picked index maps as filterable.",[342,493,494,495,498],{},"On save, the field must name one product: in each member that has documents, nearly every product has its own value, and at least one value is also found in another member. A field shared by many products, such as a type or a category, or one whose values differ per store, such as a translated URL key, fails with ",[386,496,497],{},"400 LANGUAGE_GROUP_JOIN",". A product missing from some members is fine, and so is a member with no documents yet. When one store has several documents with the same value, the one with the lowest id lends its text.",[458,500,504,507],{"name":501,"type":502,"values":503},"sharedFields","list of field names","1 to 20 fields",[464,505,418],{"id":506},"shared-fields",[342,508,509],{},"The text the other members borrow. Each shared field has to be searchable in every member. The form starts with every field the members can all search, minus fields whose name contains \"description\". Descriptions are long, they make every index bigger, and product names usually decide the match anyway. Add them if your shoppers search by words that only appear in descriptions.",[342,511,512,513,515,516,519,520,523,524,527],{},"After you save, each member gets the other members' text in the background. The ",[372,514,326],{}," column shows ",[372,517,518],{},"Syncing"," with the number of sync tasks still running, then ",[372,521,522],{},"Ready",". Each index ",[359,525,526],{"href":99},"overview"," shows the group it belongs to, with a link to this page.",[337,529,435],{"id":530},"search-the-borrowed-text",[342,532,533,534,537,538,541,542,545,546,549,550,363],{},"Saving a group adds one field per shared field and source language to each member's mapping. On the Estonian store of an Estonian, English and Russian group that shares ",[386,535,536],{},"title",", the mapping gets ",[386,539,540],{},"zs_alt.english.title"," and ",[386,543,544],{},"zs_alt.russian.title",". A field shared from under ",[386,547,548],{},"attributes"," keeps that part of its name, as in ",[386,551,552],{},"zs_alt.english.attributes.color",[342,554,555,556,559,560,563,564,567],{},"In ",[372,557,558],{},"Fields & mapping"," (",[359,561,103],{"href":562},"\u002Fdocs\u002Findexing\u002Fmapping#language-group-fields",") these fields sit in their own section, named after the group. They are always searchable. You can change their text analysis options, and you can make them returnable so search results carry the other stores' text. Those changes work like they do on any other field. Type and language stay fixed, and borrowed text can't be filtered, faceted or sorted. The group owns the fields, so ",[372,565,566],{},"Remove"," explains that instead of removing one. To drop a field, take it out of the group's shared fields.",[342,569,570,571,574],{},"Saving the group does not change your search profiles, and a profile searches only the fields it lists. So right after you save, the cabinet opens ",[372,572,573],{},"Next, search the borrowed text"," and asks which profiles should search the new fields. It lists every member's profiles and how many borrowed fields each one already searches. Profiles that search none yet are ticked.",[342,576,577,578,581,582,585,586,589,590,593,594,597],{},"Each borrowed field gets a share of the weight the profile gives the store's own field. The share is the ",[372,579,580],{},"Weight"," in the dialog and starts at 0.3, so an Estonian title at weight 5 gets the English title at 1.5, and a product that matches in the store's own language usually ranks first. Set it to 1 to copy the weights as they are. A borrowed field is only added where the profile searches the store's own field. The update button, such as ",[372,583,584],{},"Update 2 profiles",", saves the ticked profiles. ",[372,587,588],{},"Later"," closes the dialog, and ",[372,591,592],{},"Profiles"," on the group's row opens it again. ",[372,595,596],{},"Open the profile"," next to each profile opens it in the editor.",[342,599,600,601,605,606,609,610,613,614,617],{},"You can also do it by hand. In a member's ",[359,602,604],{"href":603},"\u002Fdocs\u002Fsearch\u002Fprofiles#fields-and-weights","search profile",", the borrowed fields have their own list under the store's own fields in ",[372,607,608],{},"Fields and weights",", headed ",[372,611,612],{},"From other stores in the language group",". Each is labelled with its field and store, such as ",[372,615,616],{},"title · from English (US)",". Switch on the ones you want and give each its own weight. A field switched on there starts at the same 0.3 share. A new profile includes every searchable field, borrowed ones too.",[342,619,620,622],{},[359,621,230],{"href":231}," can change the weight of a borrowed field like any other query field.",[342,624,625],{},"Through the API, a profile names a borrowed field by its full name:",[627,628,633],"pre",{"className":629,"code":630,"language":631,"meta":632,"style":632},"language-json shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","{ \"queryFields\": { \"title\": 5, \"zs_alt.english.title\": 1.5, \"zs_alt.russian.title\": 1 } }\n","json","",[386,634,635],{"__ignoreMap":632},[636,637,640,644,648,651,654,657,661,664,667,669,672,674,677,679,682],"span",{"class":638,"line":639},"line",1,[636,641,643],{"class":642},"s7iLA","{ ",[636,645,647],{"class":646},"sb7M8","\"queryFields\"",[636,649,650],{"class":642},": { ",[636,652,653],{"class":646},"\"title\"",[636,655,656],{"class":642},": ",[636,658,660],{"class":659},"ssYy9","5",[636,662,663],{"class":642},", ",[636,665,666],{"class":646},"\"zs_alt.english.title\"",[636,668,656],{"class":642},[636,670,671],{"class":659},"1.5",[636,673,663],{"class":642},[636,675,676],{"class":646},"\"zs_alt.russian.title\"",[636,678,656],{"class":642},[636,680,681],{"class":659},"1",[636,683,684],{"class":642}," } }\n",[337,686,688],{"id":687},"keeping-the-text-current","Keeping the text current",[342,690,691],{},"You do not have to do anything when products change. When the English store updates or deletes a product, the Estonian and Russian indices get the new English text a moment later, and an upload to the Estonian store keeps the text it borrowed. A full sync, a flush and a reindex of any member update the others the same way.",[342,693,694],{},"Changing an index's language while it is in a group is refused. Remove it from the group first.",[337,696,698],{"id":697},"see-where-a-match-came-from","See where a match came from",[342,700,701,702,706,707,710,711,714],{},"In the ",[359,703,705],{"href":704},"\u002Fdocs\u002Fsearch\u002Fsearch-api#try-it-in-the-playground","playground","'s score breakdown, a borrowed field reads ",[372,708,709],{},"title from English (US)",". Search explain in the API reports the store's field name and marks the copy with ",[386,712,713],{},"borrowedFrom",":",[627,716,718],{"className":629,"code":717,"language":631,"meta":632,"style":632},"{ \"field\": \"title\", \"weight\": 1.5, \"score\": 2.1, \"borrowedFrom\": \"english\" }\n",[386,719,720],{"__ignoreMap":632},[636,721,722,724,727,729,732,734,737,739,741,743,746,748,751,753,756,758,761],{"class":638,"line":639},[636,723,643],{"class":642},[636,725,726],{"class":646},"\"field\"",[636,728,656],{"class":642},[636,730,653],{"class":731},"semJd",[636,733,663],{"class":642},[636,735,736],{"class":646},"\"weight\"",[636,738,656],{"class":642},[636,740,671],{"class":659},[636,742,663],{"class":642},[636,744,745],{"class":646},"\"score\"",[636,747,656],{"class":642},[636,749,750],{"class":659},"2.1",[636,752,663],{"class":642},[636,754,755],{"class":646},"\"borrowedFrom\"",[636,757,656],{"class":642},[636,759,760],{"class":731},"\"english\"",[636,762,763],{"class":642}," }\n",[337,765,767],{"id":766},"storage","Storage",[342,769,770],{},"Document counts do not change. Each member stores the other members' shared text, so an index in a group of three grows by about twice its shared text. This is why descriptions are left out by default.",[337,772,774],{"id":773},"delete-a-group","Delete a group",[342,776,777,780,781,784],{},[372,778,779],{},"Delete"," on the group's row asks you to confirm, and ",[372,782,783],{},"Delete group"," removes the borrowed fields from every member's mapping and the borrowed text from their documents. Each index keeps its own fields, profiles, rules and synonyms.",[342,786,787,788,791,792,795],{},"A profile or rule that still searches a borrowed field blocks the delete with ",[386,789,790],{},"409 MAPPING_BREAKS_CONFIG",", and ",[386,793,794],{},"details"," lists each use. The same goes for an edit that would drop a borrowed field, such as removing a member or a shared field. Take the field out of those profiles and rules first. Deleting a member index is never blocked: the other members drop the fields it lent, and those fields are taken out of their profiles and rule field weights. A profile that searched nothing else, or a rule whose only action weighted those fields, is left as it was, and search skips what is no longer mapped until you change it.",[337,797,362],{"id":798},"api",[342,800,801,802,805],{},"The cabinet is the only way to create, change or delete a group: signed-in users manage groups. API keys and MCP agents can see which group an index is in (",[386,803,804],{},"languageGroup"," on the index) but cannot change groups, because a key limited to one index must not change the others.",[627,807,811],{"className":808,"code":809,"language":810,"meta":632,"style":632},"language-http shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","POST \u002Fv1\u002Fprojects\u002F:projectId\u002Flanguage-groups\n{ \"name\": \"Storefronts\", \"indexIds\": [\"…et\", \"…en\", \"…ru\"], \"join\": \"id\", \"sharedFields\": [\"name\", \"categories\"] }\n","http",[386,812,813,818],{"__ignoreMap":632},[636,814,815],{"class":638,"line":639},[636,816,817],{},"POST \u002Fv1\u002Fprojects\u002F:projectId\u002Flanguage-groups\n",[636,819,821],{"class":638,"line":820},2,[636,822,823],{},"{ \"name\": \"Storefronts\", \"indexIds\": [\"…et\", \"…en\", \"…ru\"], \"join\": \"id\", \"sharedFields\": [\"name\", \"categories\"] }\n",[342,825,826,827,829,830,834],{},"The answer holds the group and the ids of the sync tasks it queued. Leave out ",[386,828,501],{}," to share what the form would prefill. See the ",[359,831,833],{"href":832},"\u002Fdocs\u002Freference\u002Frest-api#language-groups","REST API reference"," for every route.",[337,836,838],{"id":837},"related","Related",[840,841,842,847,852,857,863],"ul",{},[368,843,844,846],{},[359,845,212],{"href":603},": weigh the borrowed fields.",[368,848,849,851],{},[359,850,103],{"href":562},": the borrowed fields in the mapping.",[368,853,854,856],{},[359,855,98],{"href":99},": one index per store language.",[368,858,859,862],{},[359,860,861],{"href":147},"Magento",": sync each store view into its own index.",[368,864,865,867],{},[359,866,833],{"href":832},": every route.",[869,870,871],"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 .ssYy9, html code.shiki .ssYy9{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#91CBFF}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 .semJd, html code.shiki .semJd{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#ADDCFF}",{"title":632,"searchDepth":820,"depth":820,"links":873},[874,875,881,882,883,884,885,886,887],{"id":339,"depth":820,"text":340},{"id":353,"depth":820,"text":354,"children":876},[877,879,880],{"id":466,"depth":878,"text":394},3,{"id":478,"depth":878,"text":404},{"id":506,"depth":878,"text":418},{"id":530,"depth":820,"text":435},{"id":687,"depth":820,"text":688},{"id":697,"depth":820,"text":698},{"id":766,"depth":820,"text":767},{"id":773,"depth":820,"text":774},{"id":798,"depth":820,"text":362},{"id":837,"depth":820,"text":838},"md",{},{"icon":240},{"title":236,"description":239},"mXkvx61JXxZWffwoHq6lsIS6XvxoZf1blQerzD3Dm7g",[894,895],{"title":230,"path":231,"stem":232,"description":233,"icon":234,"children":-1},{"title":242,"path":249,"stem":250,"description":251,"icon":244,"children":-1},1793717706322]