Schema changes
In an eSite based index, each eSite store has its own copy of catalog, category, product and attribute documents. Most of the data in these documents are same. This causes a large amount of duplicate data. In the schema design for Asset Store based indexes, all eSite stores share the same catalog, category, product and attribute document.
Store Schemas
"id": {
"default": {
"contract": "-11005",
"language": "-1",
"fulfillment": "13001",
"catalog": "11501"
},
"asset_store": 12001,
Catalog Schemas
auth.1.catalog
where 1
is the
store ID of the Aurora ESite store. Each eSite store has its own catalog index. The
unique ID of each catalog document is storeId-langId-catalogId
.
{
"_index": ".auth.1.catalog.202302271924",
"_type": "_doc",
"_id": "1--1-10502",
"_score": 1.0,
"_source": {
"identifier": {
"catalog": "Extended Sites Catalog Asset Store Consumer Direct",
"specification": "catalog",
"language": "en_US"
},
"name": {
"normalized": "Aurora consumer direct sample data",
"raw": "Aurora consumer direct sample data"
},
"description": {
"raw": "Aurora Consumer Direct sample data"
},
"id": {
"catalog": "10502",
"member": "7000000000000001001",
"language": "-1",
"store": "1"
},
In CAS Index Model, the store ID in the catalog index name is the catalog asset store
ID, for example, auth.10501.catalog
, where 10501
is the store id of the catalog asset store. All eSite stores share the same catalog
index. The unique ID of each catalog document is catalogId-langId
.
10502
), and
there is one document for English. The id.store is now a list of
store IDs, including the Catalog Asset Store ID and all eSite store IDs, which
inherit this catalog: 10501,1,2, 12, 22
, as shown in the following
example. {
"_index": ".auth.10501.catalog.202302271955",
"_type": "_doc",
"_id": "10502--1",
"_score": 1.0,
"_source": {
"identifier": {
"catalog": "Extended Sites Catalog Asset Store Consumer Direct",
"specification": "catalog",
"language": "en_US"
},
"name": {
"normalized": "Aurora consumer direct sample data",
"raw": "Aurora consumer direct sample data"
},
"description": {
"raw": "Aurora Consumer Direct sample data"
},
"id": {
"catalog": "10502",
"member": "7000000000000001001",
"language": "-1",
"store": [
"22",
"1",
"12",
"2",
"10501",
"32"
]
},
{
"_index": ".auth.10501.catalog.202302271955",
"_type": "_doc",
"_id": "10001--1--3050--3050",
"_score": 1.0,
"_source": {
"id": {
"catalog": "10001",
"language": "-1",
"store": "12"
},
"filters": [
{
"identifier": "Demoorg01CatalogFilter",
"usage": "",
"query": "( +*:* -path.tree:(\"1\" \"6\" \"7\" \"8\" \"9\" \"10\" \"13\" \"15\"))",
"id": {
"filter": "-3050",
"expression": "-3050",
"contract": "",
"member": ""
},
"store": "12"
}
],
Attribute Schema
auth.1.attribute
. (1
is the store
ID of the AuroraESite store). Each eSite store has its own attribute index. The
unique ID of each attribute document is
storeId-langId-attributeId. The id.store
is the eSite store ID. {
"_index": ".auth.1.attribute.202302271924",
"_type": "_doc",
"_id": "1--1-7000000000000000011",
"_score": 1.0,
"_source": {
"id": {
"language": "-1",
"attribute": "7000000000000000011",
"store": "1"
},
In CAS index model, the store ID in the attribute index name is the catalog asset
store ID, for example, auth.10501.attribute
(10501
is the store ID of the catalog asset store). All eSite stores share the same
attribute index. The unique ID of each attribute document is
attributeId-langId.
10501
(Catalog Asset Store ID). If the attribute is created in
an AuroraESite store (1), the id.store is 1, as shown in the
following example. {
"_index": ".auth.10501.attribute.202302271955",
"_type": "_doc",
"_id": "7000000000000000011--1",
"_score": 1.0,
"_source": {
"id": {
"language": "-1",
"attribute": "7000000000000000011",
"store": "10501"
},
If the attribute value is created in an eSite
store (AuroraESite store ID 1), The "store” : ”1”
under values is
used to indicate that this is a local attribute value.Page schemas (replacing the URL schema)
The URL index has been replaced by the new Page index.
The original URL index includes all categories and products. As a result, its size is large and the information it contains is largely redundant because category and product SEO URLs have already been indexed in the Category index and Product index. Additionally, the URL index does not support multiple languages (there is no language ID in the URL document ID).
In CAS index model, a Page index replaces the URL index in the eSite Index Model. The Page index only indexes URL pages that are defined in the SEOPAGEDEF database table. The number of documents in the Page index is much less than in the URL index. The Page document only contains a template element, it does not contain a page element. The Page element is generated based on the template at runtime.
storeId-url.id
. The
url.id is the unique ID in the SEOURLKEYWORD
table. {
"_index": ".auth.1.url.202302271924",
"_type": "_doc",
"_id": "1-21059",
"_score": 1.0,
"_source": {
"template": {
"name": "PRODUCT_PAGE",
"type": "ItemPage",
"title": "<seo: ProductName/> | <seo: StoreName/>",
"meta": {
"image": "Image for <seo: ProductName/> from <seo: StoreName/>",
"description": "<seo: ProductShortDescription/>",
"keyword": "<seo: ProductKeyword/> <seo: ProductManufacturerName/>"
}
},
"identifier": {
"specification": "url",
"language": "en_US",
"url": "hermitage-tweed-bomber-mcl009-092005"
},
"id": {
"catalog": "10001",
"language": "-1",
"store": "1",
"url": "21059"
},
storeId-page.id
. The
page.id is the unique ID of the SEOURLKEYWORD
table. {
"_index": ".auth.10501.page.202302271955",
"_type": "_doc",
"_id": "10002--1",
"_score": 1.0,
"_source": {
"template": {
"meta": {
"image": "Image for <seo: ProductName/> from <seo: StoreName/>",
"description": "<seo: ProductShortDescription/>",
"keyword": "<seo: ProductKeyword/> <seo: ProductManufacturerName/>"
},
"name": "PRODUCT_PAGE",
"title": "<seo: ProductName/> | <seo: StoreName/>"
},
"identifier": {
"language": "en_US"
},
"id": {
"language": "-1",
"store": "10501"
},
Category schemas
Document Id
storeId-langId-catalogId
, as in the following
example: {
"_index": ".auth.1.category.202302271924",
"_type": "_doc",
"_id": "1--1-10001-12",
In the CAS index model,
the document ID of category documents is
catalogId-categoryId-langId
, as shown
below. {
"_index": ".auth.10501.category.202302271955",
"_type": "_doc",
"_id": "10501-12--1",
id.store
In the eSite index model, each eSite store possesses its own copy of the category document. the id.store was the eSite store ID (the same as the store ID in the document unique ID)
In the CAS Index Model, all eSite stores share the same category document. In the CAS model it is changed to the owning store ID of the category.
If this category is created in a Catalog Asset Store and shared by all its eSite
stores, the id.store should be the ID of the Catalog Asset Store.
For example, if category Fasteners 12
is a category in a Catalog
Asset Store, then the id.store ID should be the Catalog Asset
Store ID (10501
).
If the category is created in an eSite store and is only visible in this eSite store, then id.store is the eSite store ID. The following screen shot shows this for the eSite model.
"id": {
"catalog": "10001",
"member": "7000000000000001001",
"catgroup": "12",
"language": "-1",
"store": "1"
},
By contrast, the CAS model is as shown
below. "id": {
"catalog": "10501",
"member": "7000000000000001001",
"catgroup": "12",
"language": "-1",
"store": "10501"
},
SEO URL
For the category SEO URL and override, the
url.assetStoreId.seo
is the SEO URL of
this category in the Catalog Asset Store. For example, an SEO URL might be
url.10501.seo
.
If an eSite has override SEO URL, then this URL is added as
url.eSiteStoreId.seo
. For example,
url.1.so
.
Old SEOs are defined in the old_seos array. For example,
url.1.old_seos
.
"url": {
"image": "images/catalog/hardware/fasteners/category/catr_hw_fasteners.png",
"thumbnail": "images/catalog/hardware/fasteners/category/catr_hw_fasteners.png",
"seo": "/fasteners"
},
"url": {
"10501": {
"image": "images/catalog/hardware/fasteners/category/catr_hw_fasteners.png",
"thumbnail": "images/catalog/hardware/fasteners/category/catr_hw_fasteners.png",
"seo": "/fasteners"
},
"2": {
"old_seos": [
"/fasteners"
],
"seo": "/fasteners-aurorab2b"
}
},
Facets
"facet": [
{
"sequence": 1.1,
"search": true,
"display": {
"zero": false,
"limit": 20,
"multiple": true,
"order": 1
},
"displayable": false,
In the Asset Store index model, displayable and sequence variables list values for all eSite stores.
In the following example, the Boys Pants’s Material
facet is not
displayable to customers and the sequence is 1.1 in the AuroraESite store.
“1”:
false
) and the sequence is 1.1 (“1”:
1.1
): {
"sequence": {
"22": 0.0,
"1": 1.1,
"12": 0.0,
"2": 0.0,
"32": 0.0
},
"search": true,
"display": {
"zero": false,
"limit": -1,
"multiple": false,
"order": 0
},
"displayable": {
"22": true,
"1": false,
"12": true,
"2": true,
"32": true
},
"id": "3074457345618268605",
"attribute": {
"identifier": "Material",
"name": "Material",
"ribbon": false,
"id": "7000000000000000009",
"swatchable": false
},
Product Schema
{
"_index": ".auth.1.product.202302271924",
"_type": "_doc",
"_id": "1--1-10001-10001",
{
"_index": ".auth.10501.product.202302271955",
"_type": "_doc",
"_id": "10001--1",
"name": {
"text_en_US": "Hermitage Fit and Flare Dress",
"normalized": "hermitage fit and flare dress",
"raw": "Hermitage Fit and Flare Dress",
"text": "Hermitage Fit and Flare Dress",
"override": {
"text_en_US": "Hermitage Fit and Flare Dress - auroraesite",
"normalized": "hermitage fit and flare dress - auroraesite",
"raw": "Hermitage Fit and Flare Dress - auroraesite",
"text": "Hermitage Fit and Flare Dress - auroraesite"
}
},
In the CAS model, all eSite stores share the same product document. The Asset Store
level name, description, and keyword are defined under the Asset Store ID, for
example, name.10501.text
.
name.1.text
. "name": {
"10501": {
"text_en_US": "Hermitage Fit and Flare Dress",
"normalized": "hermitage fit and flare dress",
"raw": "Hermitage Fit and Flare Dress",
"text": "Hermitage Fit and Flare Dress"
},
"1": {
"text_en_US": "Hermitage Fit and Flare Dress - auroraesite",
"normalized": "hermitage fit and flare dress - auroraesite",
"raw": "Hermitage Fit and Flare Dress - auroraesite",
"text": "Hermitage Fit and Flare Dress - auroraesite"
}
},
For the SEO URL override, url.assetStoreId.seo
is
the SEO URL defined in the Catalog Asset Store, and the overriden SEO URL is added
as url.eSiteStoreId.seo
. The field
old_seos
under url contains the value of the
old SEO URLs.
"url": {
"image": "images/catalog/apparel/women/wcl000_dresses/646x1000/wcl000_0028_a_red.jpg",
"thumbnail": "images/catalog/apparel/women/wcl000_dresses/200x310/wcl000_0028_a_red.jpg",
"seo": "/hermitage-fit-and-flare-dress-auroaesite",
"override": {}
},
"url": {
"10501": {
"image": "images/catalog/apparel/women/wcl000_dresses/646x1000/wcl000_0028_a_red.jpg",
"thumbnail": "images/catalog/apparel/women/wcl000_dresses/200x310/wcl000_0028_a_red.jpg",
"seo": "/hermitage-fit-and-flare-dress"
},
"1": {
"old_seos": [
"/hermitage-fit-and-flare-dress"
],
"seo": "/hermitage-fit-and-flare-dress-auroaesite"
}
},
The product offer price is encoded as prices.offer
. The eSite
override offer price is added as
prices.ContractId.offer
, where
ContractId
is the default ContractId of
the eSite Store. Following are examples for both the eSite and CAS models.
"prices": {
"offer": {
"usd": 90.0
},
"list": {
"usd": 250.0
},
"10005": {
"usd": 90.0
}
},
10005
is the default contract of theAuroraESite
store, in which the offer price is overriden with
90
: "prices": {
"offer": {
"usd": 100.0
},
"-31009": {
"usd": 100.0
},
"10009": {
"usd": 100.0
},
"list": {
"usd": 250.0
},
"-21009": {
"usd": 100.0
},
"10005": {
"usd": 90.0
},
"-11009": {
"usd": 100.0
}
},
For eSite stores that do not have override offer prices, price entries are still created with the default contract of that eSite as the key, and the price with the offer price from the asset store. All eSite stores will have a price under their default contract, even if it does not have an override price. In that case it will use the offer price inherited from the Asset store.
"inventories": {
"total": {
"quantity": 72813.0
},
"11504": {
"quantity": 1300.0
},
"11503": {
"quantity": 1300.0
},
"11547": {
"quantity": 1300.0
},
"11506": {
"quantity": 1300.0
},
"11549": {
"quantity": 1300.0
},
In the CAS index model, the inventory per
store is listed under each eSite store Id
(total/esiteId): "inventories": {
"total": {
"22": {
"quantity": 72813.0
},
"1": {
"quantity": 72813.0
},
"12": {
"quantity": 72813.0
},
"2": {
"quantity": 72813.0
},
"32": {
"quantity": 72813.0
}
},
Description Schema
storeId-languageId-catalogId-catentryId
. ESite override
description is indexed under
"override"
: {
"_index": ".auth.1.description.202302271924",
"_type": "_doc",
"_id": "1--1-10001-10001",
"_score": 1.0,
"_source": {
"description": {
"raw": "Classically tailored, this elegant satin dress features a bateau neckline, soft pleating, and a clasped belt to define the waist.",
"override": {
"raw": "<p>Classically tailored, this elegant satin dress features a bateau neckline, soft pleating, and a clasped belt to define the waist - auroaesite.</p>"
}
},
"id": {
"catalog": "10001",
"language": "-1",
"store": "1",
"object": "10001"
},
In the CAS index model, the document ID has changed to
product-productId-languageId
.
"product"
is added in the document ID to avoid conflicts.
description.10501.raw
. In addition, eSite stores' override long
descriptions are listed under their corresponding eSite store
ID. {
"_index": ".auth.10501.description.202302271955",
"_type": "_doc",
"_id": "product-10001--1",
"_score": 1.0,
"_source": {
"description": {
"10501": {
"raw": "Classically tailored, this elegant satin dress features a bateau neckline, soft pleating, and a clasped belt to define the waist."
},
"1": {
"raw": "<p>Classically tailored, this elegant satin dress features a bateau neckline, soft pleating, and a clasped belt to define the waist - auroaesite</p>"
}
},
"id": {
"language": "-1",
"store": "10501",
"object": "10001"
},
storeId-languageId-catalogId-categoryId
. "_index": ".auth.1.description.202302271924",
"_type": "_doc",
"_id": "1--1-10001-10001",
"_score": 1.0,
"_source": {
"description": {
"raw": "<p>Dress long description.</p>",
},
"id": {
"catalog": "10001",
"language": "-1",
"store": "1",
"object": "10001"
},
category-categoryId-languageId
.
"category"
is added in the document ID to avoid conflicts.
Since the long description of category
does not support eSite
override, the long description is indexed under the asset store id
(10501
): {
"_index": ".auth.10501.description.202302271955",
"_type": "_doc",
"_id": "category-10001--1",
"_score": 1.0,
"_source": {
"description": {
"10501": {
"raw": "<p>Dress long description</p>"
}
},
"id": {
"language": "-1",
"store": "10501",
"object": "10001"
},
Inventory Schema
Both eSite and CAS index models share same inventory index (for example,
auth.inventory
).
storeId-catalogId-catentryId
. {
"_index": "auth.inventory",
"_type": "_doc",
"_id": "1-10001-10040",
"_score": 1.0,
"_source": {
"inventories": {
"11504": {
"quantity": 100.0,
"id": "11504"
},
"11548": {
"quantity": 100.0,
"id": "11548"
},
"11503": {
"quantity": 100.0,
"id": "11503"
},
In the CAS index model, the Document ID has changed to
storeId-catentryId
.
Total inventory per eStite store is added under
total/storeId
.
Price Schema
There are no changes between the eSite model and the CAS model, since the price schema is not listed on a per-store basis.
Workspace Schema
There are no changes between the eSite model and the CAS model, since the workspace schema is not listed on a per-store basis.