HCL Commerce Version 9.1.12.0 or later

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

For store schemas, the only change is the addition of an asset_store value for each eSite store that indicates the Catalog Asset Store of this eSite store. For example:
                    "id": {
                        "default": {
                            "contract": "-11005",
                            "language": "-1",
                            "fulfillment": "13001",
                            "catalog": "11501"
                        },
                        "asset_store": 12001,                   

Catalog Schemas

In the eSite index model, the store ID in the catalog index name is the eSite store ID; for example, 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.

All eSite stores under this catalog asset store share the same catalog document for each supported language. In the following example, there are four eSite stores under the Catalog Asset Store, for the same sales catalog (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"
                        ]
                    },
For catalog filter documents in the catalog index, a new attribute called store is added to indicate which store the filter belongs to.
           {
                "_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

In the eSite index model, the store ID in the attribute index name is the eSite store ID, for example, 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.

The id.store is the the owning store ID of the attribute. If the attribute is created in a Catalog Asset Store, id.store is 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.

In the eSite index model, the document ID is 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"
                    },
In the CAS index model, the document ID is 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 Change

In eStire Index Model, the document ID of category documents is 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 Change

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 Change

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.

In the eSite model, SEO URLs looked like the following:
                    "url": {
                        "image": "images/catalog/hardware/fasteners/category/catr_hw_fasteners.png",
                        "thumbnail": "images/catalog/hardware/fasteners/category/catr_hw_fasteners.png",
                        "seo": "/fasteners"
                    },
In the CAS model, they appear as below.
                    "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"
                        }
                    },

Facet Change

In the Management Center, the displayable attributes and sequence of a facet can be overriden at the eSite level. In the eSite Store index model, displayable and sequence variables have a single value for that eSite .
                    "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.

In the Index, the facet's value for the AuroraESite store (1) is false (“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

In the Catalog Asset Model, the unique ID has changed from storeId-langId-masterCatalogId-catentryId to catentryId-langId. The following example shows the eSite model.
            {
                "_index": ".auth.1.product.202302271924",
                "_type": "_doc",
                "_id": "1--1-10001-10001",
The corresponding schema for the Catalog Asset Store Model is:
            {
                "_index": ".auth.10501.product.202302271955",
                "_type": "_doc",
                "_id": "10001--1",
In the eSite model, each eSite store has its own copy of the product document. ESite level name override is indexed under "override":
                    "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.

Esite overrides such as name, description, keyword, or URL (thumbnail and image), are added under the eSite store ID, for example 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.

The following example shows how this is configured in the eSite model.
                    "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": {}
                    },
In the CAS model, it is configured as follows.
                    "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.

In the eSite model:
                    "prices": {
                        "offer": {
                            "usd": 90.0
                        },
                        "list": {
                            "usd": 250.0
                        },
                        "10005": {
                            "usd": 90.0
                        }
                    },
In the CAS model, 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.

For inventory, in the eSite index model, there is only one inventory under total:
                    "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

In the eSite Index Model, for product long description, the document ID of description is 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.

All eSite stores share the same Description document. Asset Store level long descriptions are defined under the asset store ID. For example, 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"
                    },
For category long descritpion, in the eSite index model the Document ID is 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"
                    },
For the category long description, in the CAS index model, the document ID is 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).

In the eSite index model, the document ID is 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.