当前位置: 首页 > 知识库问答 >
问题:

如何在Elasticsearch中存储商店产品

邢永安
2023-03-14

我们有一个在线商店,在三个表中存储产品详细信息:

  1. 产品(名称、描述、品牌)-总计10,000个条目
  2. 产品-变体(大小、价格、可用性)-总计80.000项
  3. 产品-属性(颜色)-总计60.000项

这给出了大约400.000项的总组合。

示例:

  • 产品为“Nike Air Max”
  • 变体是“尺寸36,70美元”、“尺寸37,72美元”、“尺寸38,74美元”
  • 属性为“Color Red”和“Color Black”
  • 总共6种组合(“Nike Air Max+36+红色”、“Nike Air Max+36+黑色”...)

我正在寻找一种方法来存储元素的弹性,以获得最佳的过滤性能,如查询“给我所有产品在大小34-37在红色或橙色,成本低于90美元”

我应该如何在Elasticsearch中反映这种设置,即我应该创建哪些索引来获得最佳的搜索和筛选性能(索引性能并不重要)

注意:我见过像“非正规化”、“嵌套文档”和“子文档”这样的关键字,但不确定我应该更多地阅读和实现哪种方法。

共有1个答案

鄂琛
2023-03-14

你有两种方法可以做到这一点

  1. 按鞋类(=product)创建一个文档,每个文档将存储关于该产品的所有信息。这将最大限度地减少集群中的文档数量。

类似于

shoes
    "name":    { "type": "keyword"  }, 
    "brand":     { "type": "keyword"  },  
    "Description": {
        "type":     "string",
        "index":    "not_analyzed"
    }

    nested:
        variant:
            size: { "type": "integer" },
            price: { "type": "float" },
            availability: { "type": "integer" },
            colors: { "type": "keyword"  }

.

shoes
    "name":    { "type": "keyword"  }, 
    "brand":     { "type": "keyword"  },  
    "Description": {
        "type":     "string",
        "index":    "not_analyzed"
    }

    size: { "type": "integer" },
    price: { "type": "float" },
    availability: { "type": "integer" },
    colors: { "type": "keyword"  }

如果您必须像您所说的那样使用query,第二种解决方案会更好(您不必过滤嵌套字段,统计或聚合将很容易,对于elasticsearch来说400K项将很容易),如果您想为一个网站制作搜索引擎,我认为这更好。如果您需要按“产品”进行统计或后台工具,第一种模式可能会更好。

 类似资料:
  • 我写了一个与快速应用编程接口的反应应用程序 我在授权的快速会话中实现了oauth2 我部署到Netlify的客户端-https://keen-bhaskara-257c68.netlify.app/ 这里是回购:https://github.com/ThevinSilva/loghorizonServer 服务器端到Heroku-https://loghorizon-server.herokuap

  • 我试图只从商店页面隐藏缺货产品,但将它们保留在单独的分类页面上。 Woocommerce设置只允许选择显示缺货产品或完全隐藏它们。 如何在Woocommerce中仅在商店存档页面上隐藏缺货产品?

  • 我想在Wp/WooCommerce /shop/页面上显示所有产品及其变体。(我下面描述的过程是我试图让它工作的过程。欢迎其他选择。 标准是什么:产品A和产品B在网站上展示。产品A有“广告到购物车”按钮。产品B有“选择选项”按钮。 我想要的是:产品A是一种“简单”的产品,在商店页面上显示产品B是一种“可变”产品,有两种组合(黑色/蓝色)。添加到购物车按钮将此变体添加到购物车 我想在商店页面上展示3

  • 问题内容: 使用Elasticsearch 1.4.3 我正在建立一种“报告”系统。客户可以选择要在结果中返回的字段。 在90%的情况下,客户端永远不会选择所有字段,因此我认为可以在映射中禁用_source字段以节省空间。但是后来我得知 不返回字段。 因此,我假设我必须为每个字段使用“ store”:true。从我阅读的内容来看,这对于搜索来说会更快,但是我认为从空间角度来看,它与_source相

  • 目前我正在为客户建立一个在线商店(使用OpenCart)。所有的支付和交易都是通过支付网关(PayPal等)进行的,所以网站从不存储支付信息(银行详细信息、卡号等)。 然而,我的客户仍然担心客户个人信息(地址、出生日期、全名等)的安全。我向他解释过,使用SSL,客户端和服务器之间传输的任何数据都是加密的,不加密服务器上的个人信息是正常的(我指出,即使是像索尼这样的大公司也不加密)。 显然,加密My

  • 嘿,我想打印出飞机存储。飞机存储包含字符串和航班的哈希图。这就是flight.add/print进入主端的地方。但我现在希望航空公司和航班并行打印,所以我把航空公司商店和我试图打印出PlaneStore以及航空公司,但我得到的只是一个内存地址,有人能帮我吗?