我正在开发电子商务搜索页面,需要免费提供文本搜索产品,并拥有多个方面选项和排序功能。我面临的问题与产品价格有关: 一种产品有多种价格 - 有特殊折扣,B2B客户特定价格和特定B2C价格。每种产品可能有几百个价格。
我需要能够对产品进行全文搜索,但仍然可以对其中一个选定的价格组进行排序。
我最初的意思是将所有价格都放入产品项目中,但这意味着每次价格变化时我都需要更新索引中的产品对象 - 这通常是。这也会使对象变得非常大。
我看到elasticsearch现在具有HasParent / HasChildren查询功能,但我不确定这是否是正确的方法,或者是否可行。 是否可以将价格保持为产品类型之外的单独类型,并使用HasParent / HasChilden查询对价格进行排序?
答案 0 :(得分:0)
我最初的意思是将所有价格都放入产品项目中,但这意味着每次价格变化时我都需要更新索引中的产品对象 - 这通常是。这也会使对象变得非常大。
我个人倾向于不在Elasticsearch中存储复杂的定价数据,至少不是商业逻辑计算的价格,如折扣和特定的B2C价格。
可以存储基本价格用于查询和排序,并使用脚本分别使用script queries和script sorting将定价逻辑应用于此。
我看到elasticsearch现在具有HasParent / HasChildren查询功能,但我不确定这是否是正确的方法,或者是否可行。是否可以将价格保持为产品类型之外的单独类型,并使用HasParent / HasChilden查询对价格进行排序?
父/子关系对单个索引中的文档进行操作,文档上的join datatype字段用于指示父项与子项之间的关系,子文档在与父项相同的分片上建立索引。如果儿童不均匀地分布在父母/碎片上,例如一个父文档有一百万个孩子而其他人只有几个孩子,它可能最终得到可以影响性能的分片中的热点。产品和定价数据并不像父母/孩子那样适合;定价听起来太动态了,无法存储在文档中。