如何在Elasticsearch中存储产品目录

mar*_*rek 5 elasticsearch

我将在Eleasticsearch中存储产品目录的数据,并在此处描述其简化模型: 产品目录模型

我可以将整个产品存储为一个文档:

{
  "productNumber": "123456",
  "brand": "Acme Inc.",
  "title": "T-Shirt",
  "featured": false,
  "promo": true,
  "categories": [
    { "categoryId": "124", "categoryPath": "/10/123/124", "title": "T-Shirts", "titlePath": "Men's/Summer/T-Shirts" },
    { "categoryId": "666", "categoryPath": "/20/666", "title": "Men's", "titlePath": "Promos / Men's" }
  ],
  "variants": [
    {
      "sku": "123456-01",
      "color": "red",
      "size": "XL",
      "prices": [
        { "pricelist": "EUR-RRP", "currency": "EUR", "price": 200, "discountPc": 0, "discounted": false },
        { "pricelist": "EUR-PROMO", "currency": "EUR", "price": 180, "discountPc": 10, "discounted": true }
      ],
      "inventories": [
        { "inventoryId": "INV-001", "stockCount": 0 },
        { "inventoryId": "INV-002", "stockCount": 5 }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我对搜索目录有这些要求,这是否是最好的方法,还是应该将其拆分为具有相关性的多个索引:

  • 可分页的产品列表
  • 按品牌,标题,价格,折扣排序
  • 每个搜索请求具有预先配置的搜索参数,如下所示:

    • RootCategory-仅包含以“ categoryPath”开头的产品(例如“ / 10/123”)
    • 语言环境-产品标题/说明已本地化为多种语言
    • OnStockOnly布尔标志-定义是否仅在一个库存上包含至少具有一个变体的产品
    • 价目表-要使用的价目表的ID
  • 用户定义的搜索参数:

    • 价格范围“从-到”(价格来自如上所述的定义价格表)
    • 构面:产品品牌,productVariant颜色,productVariant尺寸
    • 标志(复选框-仅在选中时适用):特色产品,促销产品,折扣价(至少一个产品变体)

请注意,目录将是多语言的,因此该想法是为每种语言创建索引(例如,catalog-en,catalog-de等)。