--- title: Resources created by the Coveo app for Shopify slug: q2bb0227 canonical_url: https://docs.coveo.com/en/q2bb0227/ collection: coveo-for-commerce source_format: adoc --- # Resources created by the Coveo app for Shopify When you sync your Shopify product catalog with the [Coveo Platform](https://docs.coveo.com/en/186/), the **Coveo AI Search & Discovery** app creates or updates the following resources in your [Coveo organization](https://docs.coveo.com/en/185/): * [Sources](#sources): One GraphQL API [source](https://docs.coveo.com/en/246/) per market and language combination. * [Catalog entities](#catalog-entities): One [catalog entity](https://docs.coveo.com/en/3143/) per [source](https://docs.coveo.com/en/246/). * [Fields](#fields): A set of standard and custom [fields](https://docs.coveo.com/en/200/) that map product and [variant](https://docs.coveo.com/en/q2bb0284/) [metadata](https://docs.coveo.com/en/218/). This can also include optional Shopify [metafields](#metafields). * [Tracking IDs and properties](#tracking-ids-and-properties): One [tracking ID](https://docs.coveo.com/en/o8rb0139/) and matching [property](https://docs.coveo.com/en/p4ue0547/) per market. * [Storefront associations](#storefront-associations): One [storefront](https://docs.coveo.com/en/p33g0410/) association per market and [locale](https://docs.coveo.com/en/p4tf0351/) combination. * [Query pipelines](#query-pipelines): One [query pipeline](https://docs.coveo.com/en/180/) per market and [product discovery solution](https://docs.coveo.com/en/o53d9587/) combination. ## Sources A [source](https://docs.coveo.com/en/246/) is a type of [index](https://docs.coveo.com/en/204/) container that holds a set of [items](https://docs.coveo.com/en/pa8f6515/). When you sync your Shopify product catalog with the [Coveo Platform](https://docs.coveo.com/en/186/), the **Coveo AI Search & Discovery** app uses the [Shopify GraphQL Admin API](https://shopify.dev/docs/api/admin-graphql) to retrieve your market languages, regions, and base currencies. > **Note** > > Currently, the app only supports base currencies, not [local currencies](https://help.shopify.com/en/manual/international/pricing). In your [Coveo organization](https://docs.coveo.com/en/185/), the app then creates one [GraphQL API source](https://docs.coveo.com/en/n6gh2329/) per market and language combination to [index](https://docs.coveo.com/en/204/) your products. These [sources](https://docs.coveo.com/en/246/) use the following naming scheme: ```text shopify - ``` For example, a [source](https://docs.coveo.com/en/246/) could be named as follows: `shopify canada docs_coveo en cad - 1c3386f2-ec73-4716-b6df-b4b7963a8743`. Every [source](https://docs.coveo.com/en/246/) is automatically [configured for Commerce](https://docs.coveo.com/en/n6gh2329#commerce-requirements) and uses the default [source update schedule](https://docs.coveo.com/en/oc2d1151#source-update-schedule). The app also creates a matching [catalog entity](#catalog-entities) for each [source](https://docs.coveo.com/en/246/) and [storefront associations](#storefront-associations) to associate your [catalog entities](https://docs.coveo.com/en/3143/) with your [storefronts](https://docs.coveo.com/en/p33g0410/) in the target [locales](https://docs.coveo.com/en/p4tf0351/). Each of these [sources](https://docs.coveo.com/en/246/) scans your Shopify store for products and their [variants](https://docs.coveo.com/en/q2bb0284/), [indexing](https://docs.coveo.com/en/204/) the active ones. You can therefore have multiple Coveo [items](https://docs.coveo.com/en/pa8f6515/) for a single Shopify product or variant, each corresponding to a specific market and language combination. **Example** You have three markets: the US, Canada, and a simplified "Europe" that consists of France and Germany. These markets have the following language pairings: * US: English * Canada: English, French * Europe: French, German There will be five [sources](https://docs.coveo.com/en/246/): ![Example sources | Coveo Platform](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/shopify-example-sources.png) ## Catalog entities A [catalog entity](https://docs.coveo.com/en/3143/) is a commerce-specific resource that establishes a [catalog data](https://docs.coveo.com/en/obcf0333/) structure and enables [Coveo Machine Learning (Coveo ML)](https://docs.coveo.com/en/188/) and [Coveo Analytics](https://docs.coveo.com/en/182/) reporting. The **Coveo AI Search & Discovery** app creates one [catalog entity](https://docs.coveo.com/en/3139/) per [source](https://docs.coveo.com/en/246/). Each [catalog entity](https://docs.coveo.com/en/3143/) is based on the same name as its matching [source](https://docs.coveo.com/en/246/), but is limited to 50 characters. For example, if the [source](https://docs.coveo.com/en/246/) is `shopify canada docs_coveo en cad - 1c3386f2-ec73-4716-b6df-b4b7963a8743`, then the [catalog entity](https://docs.coveo.com/en/3143/) would be named `shopify canada docs_coveo en cad - 1c3386f2-ec73-4`. **Example** You have three markets: the US, Canada, and a simplified "Europe" that consists of France and Germany. These markets have the following language pairings: * US: English * Canada: English, French * Europe: French, German There will be five [catalog entities](https://docs.coveo.com/en/3143/) to match the five [sources](https://docs.coveo.com/en/246/): ![Example catalog entities | Coveo Platform](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/shopify-example-catalog-entities.png) ## Fields In the [Coveo Platform](https://docs.coveo.com/en/186/), a [field](https://docs.coveo.com/en/200/) is an [index](https://docs.coveo.com/en/204/)-wide container that holds information about each [item](https://docs.coveo.com/en/pa8f6515/). Every Coveo [field](https://docs.coveo.com/en/200/) has a unique [name](#field-names) and a [type](#field-types). When a [source](https://docs.coveo.com/en/246/) is created in your [Coveo organization](https://docs.coveo.com/en/185/), the [Coveo Platform](https://docs.coveo.com/en/186/) automatically generates a set of [fields](https://docs.coveo.com/en/200/) (if they don't already exist). Some of these are default [fields](https://docs.coveo.com/en/200/) that are common to all [sources](https://docs.coveo.com/en/246/), such as `language`, `permanentid`, and `uri`. When the **Coveo AI Search & Discovery** app [creates GraphQL API sources](#sources) in your [organization](https://docs.coveo.com/en/185/), it generates a set of commerce-specific [fields](https://docs.coveo.com/en/200/) in addition to the default [fields](https://docs.coveo.com/en/200/). The app [indexes](https://docs.coveo.com/en/204/) certain [metadata](https://docs.coveo.com/en/218/) values from your Shopify product catalog into these [fields](https://docs.coveo.com/en/200/), which are classified as either [Coveo standard fields](#coveo-standard-fields) or [Shopify standard fields](#shopify-standard-fields). Besides the standard fields, you can [index](https://docs.coveo.com/en/204/) up to 650 additional Shopify product and [variant](https://docs.coveo.com/en/q2bb0284/) [metafields](#metafields) as Coveo custom [fields](https://docs.coveo.com/en/200/) to enhance the search experience. > **Important** > > If your metafields don't match the Coveo [field naming conventions](#field-names), or if their [type](#field-types) isn't supported by the [Coveo Platform](https://docs.coveo.com/en/186/), you won't be able to select them in the **Fields** section of the **Catalog sync** tab of the Coveo app. > Refer to the relevant sections for more information. In the app, you can also select which [fields](https://docs.coveo.com/en/200/) to use as [facets](https://docs.coveo.com/en/198/) in your [search interfaces](https://docs.coveo.com/en/2741/). When you create [facets](https://docs.coveo.com/en/198/) in your [search interface](https://docs.coveo.com/en/oc2d1156/), you can only use [fields](https://docs.coveo.com/en/200/) that are explicitly [facet](https://docs.coveo.com/en/198/)-enabled. ![Example fields | Coveo Platform](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/shopify-example-fields.png) ### Field names In the [Coveo Platform](https://docs.coveo.com/en/186/), [field](https://docs.coveo.com/en/200/) names must: * Contain only lowercase letters, numbers, or underscore characters. * Start with a lowercase letter. * Be at most 255 characters in length. If a [field](https://docs.coveo.com/en/200/) name doesn't meet these requirements, it's tagged as `Invalid` and you can't select it in the **Fields** section of the **Catalog sync** tab of the Coveo app. ![A structured metafield with an invalid name](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/metafield-invalid-name.png) You can resolve this by [renaming](#rename-fields) the [field](https://docs.coveo.com/en/200/) in the **Coveo AI Search & Discovery** app. ### Field types In the [Coveo Platform](https://docs.coveo.com/en/186/), every [field](https://docs.coveo.com/en/200/) is configured for a specific [type of data](https://docs.coveo.com/en/1833#field-type). You can't manually set [field](https://docs.coveo.com/en/200/) types in the **Coveo AI Search & Discovery** app. It automatically configures [fields](https://docs.coveo.com/en/200/) as follows: * When they're generated, [Coveo standard fields](#coveo-standard-fields) and [Shopify standard fields](#shopify-standard-fields) are set to the appropriate type. * Most structured [metafields](#metafields) are automatically set to one of the following types when they're [indexed](https://docs.coveo.com/en/204/) as Coveo custom [fields](https://docs.coveo.com/en/200/): -- ** String ** Integer 64 ** Decimal ** Date -- Some Shopify metafield types aren't yet supported by the [Coveo Platform](https://docs.coveo.com/en/186/). If a structured metafield uses a type that isn't supported by Coveo, it's tagged as `Disabled` and you can't select it in the **Fields** section of the **Catalog sync** tab of the Coveo app. ![A structured metafield with an unsupported type](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/metafield-unsupported-type.png) * Unstructured metafields are set to the string type. Once a [field](https://docs.coveo.com/en/200/) has been created in the [Coveo Platform](https://docs.coveo.com/en/186/), you can't edit its type. If you want to change a [field](https://docs.coveo.com/en/200/)'s type, you'll have to [delete the field and recreate it](#delete-and-recreate-fields) in the [Coveo Administration Console](https://docs.coveo.com/en/183/). Alternatively, you can [rename the field in the app](#rename-fields) and a [field](https://docs.coveo.com/en/200/) with the new name will be created in your [Coveo organization](https://docs.coveo.com/en/185/) when you sync your Shopify product catalog with the [Coveo Platform](https://docs.coveo.com/en/186/). ### Coveo standard fields When you sync your Shopify product catalog with the [Coveo Platform](https://docs.coveo.com/en/186/), the app automatically [indexes](https://docs.coveo.com/en/204/) certain product [metadata](https://docs.coveo.com/en/218/) in a set of standard [fields](https://docs.coveo.com/en/200/). For example, a Shopify product's variant identifier is [indexed](https://docs.coveo.com/en/204/) in the `ec_product_id` [field](https://docs.coveo.com/en/200/). Most of these [fields](https://docs.coveo.com/en/200/) use the `ec_` prefix and are classified as [standard commerce fields](https://docs.coveo.com/en/n73f0502#standard-commerce-fields). The only exception is `objecttype`, which is considered a [structure field](https://docs.coveo.com/en/n73f0502#structure-fields). If these [fields](https://docs.coveo.com/en/200/) don't already exist in your [Coveo organization](https://docs.coveo.com/en/185/), they're automatically generated when the app creates your [sources](https://docs.coveo.com/en/246/). In the app, the Coveo standard [fields](https://docs.coveo.com/en/200/) are preselected and can't be unselected because they're required by Coveo for Commerce features. Expand the following section to see a table with the Coveo standard [fields](https://docs.coveo.com/en/200/). **Coveo standard fields**
Details [%header,cols="1,1,4"] |=== |Name |Type |Description and source |`objecttype` |String |The object type. This is always `product`. |`ec_name` |String |The name of the product. This is mapped from the variant display name. |`ec_description` |String |The description of the product. This is mapped from the product description. |`ec_shortdesc` |String |A short description of the product. This is mapped from the product description. |`ec_brand` |String |The brand of the product. This is mapped from the vendor. |`ec_category` |String |The category of the product. This is mapped from the product category. |`ec_thumbnails` |String |A collection of lower-resolution product images (in URL format) used to improve page load time. This is mapped from the variant or product image. |`ec_images` |String |A collection of high-resolution product images (URL format) used for viewing product details. This is mapped from the variant or product image. |`ec_price` |Decimal |The price of the product. This is mapped from the variant or compare at price. |`ec_promo_price` |Decimal |The promotional price of the product. This is mapped from the variant price. |`ec_in_stock` |String |Whether the product is in stock. This is mapped from the variant inventory quantity. |`ec_item_group_id` |String |Groups similar products together. This is mapped from the product identifier. |`ec_product_id` |String |The unique identifier of the product. This is mapped from the variant identifier. |===
> **Important** > > If any of the [fields](https://docs.coveo.com/en/200/) in your [Coveo organization](https://docs.coveo.com/en/185/) have the same names as the standard commerce [fields](https://docs.coveo.com/en/200/), but their [types](https://docs.coveo.com/en/1833#field-type) don't match, you'll encounter an error: > > ![Field type error](:https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/field-type-error.png) > > You can't rename Coveo standard fields in the app, nor can you edit [field](https://docs.coveo.com/en/200/) types once they have been created in the [Coveo Platform](https://docs.coveo.com/en/186/). > You'll have to [delete and recreate them](#delete-and-recreate-fields) with the expected types in the [Coveo Administration Console](https://docs.coveo.com/en/183/). ### Shopify standard fields The app automatically generates several standard [fields](https://docs.coveo.com/en/200/) for commonly used [metadata](https://docs.coveo.com/en/218/) that's specific to Shopify. Unlike the Coveo standard [fields](https://docs.coveo.com/en/200/), the Shopify standard [fields](https://docs.coveo.com/en/200/) aren't preselected by default, and they can be selected or unselected in the app. They can also be [renamed](#rename-fields) if necessary. Expand the following section to see a table with the Shopify standard [fields](https://docs.coveo.com/en/200/). **Shopify standard fields**
Details [%header,cols="1,1,4"] |=== |Name |Type |Description and source |`sku` |String |The SKU of the product or variant. This is mapped from the product or variant's SKU field. |`created_at` |Date |The date and time at which the product or variant was created. This value is visible in the product or variant's adjustment history. |`tags` |String |A list of searchable keywords that are associated with the product or variant. These are mapped from the product or variant's tags. |`product_type` |String |A custom category defined by the merchant. This is mapped from the product's type field. |`featured_media` |String |The featured media associated with the product. This is mapped from the product's media field. |`unitcost` |Decimal |The cost associated with the first product variant. |===
### Metafields The [Coveo Platform](https://docs.coveo.com/en/186/) [indexes](https://docs.coveo.com/en/204/) Shopify [metafields](https://help.shopify.com/en/manual/custom-data/metafields) as Coveo [fields](https://docs.coveo.com/en/200/). You can use metafields to pass product attributes that the platform wouldn't [index](https://docs.coveo.com/en/204/) otherwise. This lets you create merchandising rules that target these attributes or display them in [product discovery solution](https://docs.coveo.com/en/o9cf0524/) interfaces. Metafields are categorized as either _structured_ or _unstructured_. Structured metafields have definitions in your Shopify [storefront](https://docs.coveo.com/en/p33g0410/), while unstructured metafields don't. Unstructured metafields are typically used by customers who exceed [Shopify's limit on metafield definitions](https://shopify.dev/docs/apps/build/metafields/metafield-limits). One use case is leveraging metafields to pass Shopify [variant](https://docs.coveo.com/en/q2bb0284/) option values to the [index](https://docs.coveo.com/en/204/) as Coveo [fields](https://docs.coveo.com/en/200/). When the [Coveo Platform](https://docs.coveo.com/en/186/) [indexes](https://docs.coveo.com/en/204/) Shopify variants, the variant options aren't stored in their own [fields](https://docs.coveo.com/en/200/). To use a specific variant option, create a metafield and set it for each variant. Expand the following sections to see examples of how to use structured and unstructured metafields to pass extra data to your Coveo [index](https://docs.coveo.com/en/204/). **Structured metafield example**
Details In the Barca [storefront](https://docs.coveo.com/en/p33g0410/), `The Complete Snowboard` product has five color variants: Dawn, Electric, Ice, Powder, and Sunset. ![Barca product with color variants](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/product-with-color-variants.png) The [Coveo Platform](https://docs.coveo.com/en/186/) [indexes](https://docs.coveo.com/en/204/) the following product [catalog object](https://docs.coveo.com/en/ncig0154/) [items](https://docs.coveo.com/en/pa8f6515/): * The Complete Snowboard - Dawn * The Complete Snowboard - Electric * The Complete Snowboard - Ice * The Complete Snowboard - Powder * The Complete Snowboard - Sunset However, the variant color values aren't [indexed](https://docs.coveo.com/en/204/) in a [field](https://docs.coveo.com/en/200/). To target variants by color, you define a variant metafield called `Snowboard color`. ![Variant metafield definition](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/variant-metafield-definition.png) You then enter the color values in the `Snowboard color` metafield for each variant. ![Set metafield in variant](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/set-metafield-in-variant.png) When you [sync your Shopify product catalog](https://docs.coveo.com/en/p2la0421#catalog-sync), select the `snowboard_color` metafield. ![Index the variant metafield | Coveo app for Shopify](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/index-variant-metafield.png) After syncing your product catalog, the five variant [items](https://docs.coveo.com/en/pa8f6515/) in your [index](https://docs.coveo.com/en/204/) will each have the `snowboard_color` [field](https://docs.coveo.com/en/200/). You can now create a [ranking rule in the CMH Search manager](https://docs.coveo.com/en/o5se0523/) to boost [items](https://docs.coveo.com/en/pa8f6515/) whose `snowboard_color` is `Ice`. ![Create a boost ranking rule for the variant | Coveo Merchandising Hub](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/create-boost-rule-for-variant.png)
**Unstructured metafield example**
Details You want to create a merchandising rule that targets snowboards by weight, but you've already hit Shopify's limit on metafield definitions. You [create an unstructured metafield](https://help.shopify.com/en/manual/custom-data/metafields/metafield-definitions/migrating-metafields-to-a-definition#definitions-for-existing-metafields) in the `custom` namespace called `snowboard_weight`. ![The unstructured metafield is created](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/unstructured-metafield-created.png) On the **Catalog sync** tab of the Coveo app, you click **Edit Fields**. [TIP]
You can also add unstructured fields directly in the **Fields** section in the **Catalog sync** step of the guided setup process. ##### You select the **Unstructured** tab and click **Add fields**. In the modal that appears, you enter `custom.snowboard_weight` and click **Done**. ![Add the unstructured metafield](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/add-unstructured-metafield.png) The metafield that you added is automatically selected. ![The unstructured metafield is selected](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/unstructured-metafield-selected.png) > **Tip** > > To edit or remove an unstructured metafield, hover over it and click [dots]. You click **Back** and then [manually launch a sync](https://docs.coveo.com/en/oc2d1151#when-to-manually-sync-your-catalog) to apply these changes in the [Coveo Platform](https://docs.coveo.com/en/186/). #### === Rename fields You can rename [fields](https://docs.coveo.com/en/200/) in the **Coveo AI Search & Discovery** app. After you rename a [field](https://docs.coveo.com/en/200/) in the app, the next time you sync your Shopify product catalog with the [Coveo Platform](https://docs.coveo.com/en/186/), a [field](https://docs.coveo.com/en/200/) with the new name will be created in your [Coveo organization](https://docs.coveo.com/en/185/). To rename a [field](https://docs.coveo.com/en/200/) . In the **Coveo AI Search & Discovery** app, hover over the [field](https://docs.coveo.com/en/200/) that you want to rename. . Click [dots] and select **Rename Coveo field**. . Enter a new name that meets the [field naming requirements](#field-names). . Click **Save**. ### Delete and recreate fields You can't edit [field](https://docs.coveo.com/en/200/) [types](https://docs.coveo.com/en/1833#field-type) in the [Coveo Administration Console](https://docs.coveo.com/en/183/). If there's a type mismatch between the standard [fields](https://docs.coveo.com/en/200/) used by the app and [fields](https://docs.coveo.com/en/200/) in your [Coveo organization](https://docs.coveo.com/en/185/) with the same names, you'll have to delete your existing [fields](https://docs.coveo.com/en/200/) and recreate them with the expected types. For example, if you have an existing string-type [field](https://docs.coveo.com/en/200/) named `ec_price`, you'll see an error when you try to sync because the app expects that [field](https://docs.coveo.com/en/200/) to be a decimal: ![Field type error](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/field-type-error.png) To delete and recreate [fields](https://docs.coveo.com/en/200/) . In the [Administration Console](https://docs.coveo.com/en/183/), [delete any mappings](https://docs.coveo.com/en/1640#manage-mappings) that are related to the [fields](https://docs.coveo.com/en/200/) you want to replace. > **Important** > > Because [mappings](https://docs.coveo.com/en/217/) exist in all [sources](https://docs.coveo.com/en/246/), you'll have to delete the target [mappings](https://docs.coveo.com/en/217/) in every [source](https://docs.coveo.com/en/246/). . On the [**Fields**](https://platform.cloud.coveo.com/admin/#/orgid/content/fields/) ([platform-ca](https://platform-ca.cloud.coveo.com/admin/#/orgid/content/fields/) | [platform-eu](https://platform-eu.cloud.coveo.com/admin/#/orgid/content/fields/) | [platform-au](https://platform-au.cloud.coveo.com/admin/#/orgid/content/fields/)) page, select the [field](https://docs.coveo.com/en/200/) that you want to delete and click **Delete** in the Action bar, then click **Delete** again to confirm. Repeat this step for every [field](https://docs.coveo.com/en/200/) that you want to delete. . [Add one or more new fields](https://docs.coveo.com/en/1833#add-a-field). Make sure that every new [field](https://docs.coveo.com/en/200/) uses the [correct type](https://docs.coveo.com/en/n73f0502#standard-commerce-fields). . [Recreate any mappings](https://docs.coveo.com/en/1640#manage-mappings) related to the new [fields](https://docs.coveo.com/en/200/). > **Important** > > You'll have to recreate the target [mappings](https://docs.coveo.com/en/217/) in all [sources](https://docs.coveo.com/en/246/). ## Tracking IDs and properties A [tracking ID](https://docs.coveo.com/en/n8tg0567/) is a unique identifier, such as `market_27852734695`, which is used to link [events](https://docs.coveo.com/en/260/) so that they can be analyzed and [attributed](https://docs.coveo.com/en/m7l98577/) to the right [product discovery solution](https://docs.coveo.com/en/o9cf0524/). A [property](https://docs.coveo.com/en/o7vh0012/) is equivalent to one [tracking ID](https://docs.coveo.com/en/o8rb0139/), except that it has a user-readable display name, such as `Europe`. The **Coveo AI Search & Discovery** app creates one [tracking ID](https://docs.coveo.com/en/o8rb0139/) and matching [property](https://docs.coveo.com/en/p4ue0547/) per market. ![Example tracking IDs and properties | Coveo Platform](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/shopify-example-properties.png) ## Storefront associations A [storefront association](https://docs.coveo.com/en/o48e0216/) connects a [catalog entity](https://docs.coveo.com/en/3143/) with a specific [tracking ID](https://docs.coveo.com/en/o8rb0139/) and [locale](https://docs.coveo.com/en/o25a0034#locale). The **Coveo AI Search & Discovery** app creates one [storefront](https://docs.coveo.com/en/p33g0410/) association per market and [locale](https://docs.coveo.com/en/p4tf0351/) combination. **Example** You have three markets: the US, Canada, and a simplified "Europe" that consists of France and Germany. Based on the languages available in each market, there are five [sources](https://docs.coveo.com/en/246/) and therefore five [catalog entities](https://docs.coveo.com/en/3143/). Both of the European countries in this example have two [locales](https://docs.coveo.com/en/p4tf0351/), one for each language that's configured for the market. For example, Germany has the [locales](https://docs.coveo.com/en/p4tf0351/) `de-DE-EUR` (German in Germany with EUR) and `fr-DE-EUR` (French in Germany with EUR). Locales follow the `language-country-currency` format. In total, there will be seven storefront associations: ![Example storefront associations | Coveo Platform](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/shopify-example-storefront-associations.png) ## Query pipelines A [query pipeline](https://docs.coveo.com/en/1611/) is a set of rules that modify [queries](https://docs.coveo.com/en/231/). The **Coveo AI Search & Discovery** app creates one [query pipeline](https://docs.coveo.com/en/180/) for each market and [product discovery solution](https://docs.coveo.com/en/o53d9587/) combination. **Example** You have three markets: the US, Canada, and Europe. Coveo for Commerce has three [product discovery solutions](https://docs.coveo.com/en/o9cf0524/): search, product listings, and recommendations. There will be ten [query pipelines](https://docs.coveo.com/en/180/), including the default: ![Example query pipelines | Coveo Platform](https://docs.coveo.com/en/assets/images/coveo-for-commerce/images/shopify/shopify-example-query-pipelines.png)