首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于选项的产品过滤

基于选项的产品过滤
EN

Stack Overflow用户
提问于 2015-10-12 09:55:12
回答 1查看 86关注 0票数 2

我试图计算一个查询,根据可过滤的选项、颜色、大小等来过滤产品。

用例:获取所有大小为8和红色的产品。

尝试1:使用交叉

代码语言:javascript
运行
复制
FOR product IN products
    FILTER product.options != null

    FOR productOption IN product.options
        FILTER productOption.option == "Size" AND LENGTH( INTERSECTION( productOption.value, ["8","14","16"] ) ) > 0
            AND productOption.option == "Color" AND LENGTH( INTERSECTION( productOption.value, ["Red"] ) ) > 0

RETURN product

尝试2:使用多个过滤器

代码语言:javascript
运行
复制
FOR product IN products
    FILTER product.options != null

    FOR productOption IN product.options
        FILTER productOption.option == "Size"
            FOR productSizeOptionValue IN productOption.value
                FILTER productSizeOptionValue IN ["8","10"]
        FILTER productOption.option == "Color"
            FOR productColorOptionValue IN productOption.value
                FILTER productColorOptionValue IN ["Red"]

RETURN product

我不确定我的想法是否应该沿着先获得可能的产品候选人的路线使用LET,而不是合并每个单独的LET查询的结果。看上去相当笨拙!

EN

Stack Overflow用户

发布于 2015-10-23 13:47:25

尝试1将无法工作,因为它在productOption.option上包含两个和组合的筛选条件,具有不同的比较值:

代码语言:javascript
运行
复制
...
FILTER 
       productOption.option == "Size" 
   AND LENGTH(INTERSECTION(...))
   AND productOption.option == "Color"
   AND LENGTH(INTERSECTION(...))
...

这是行不通的,因为option值不能同时为"Size""Color"

我认为将产品选项建模为单独的属性可能比使用泛型选项数组更明智。如果一个产品对于每个不同的选项只能有一个值,而不是多个选项,这将是可行的。在这种方法中,产品如下所示:

代码语言:javascript
运行
复制
{ "Size": "8", "Color": "Red", "HasWheels": true }

然后,对产品属性的筛选变得更容易。

代码语言:javascript
运行
复制
FOR product IN products
  FILTER product.Size IN [ "8", "10" ] 
     AND product.Color == "Red"
  RETURN product

然后搜索条件也可以是OR-组合,例如。

代码语言:javascript
运行
复制
  FILTER product.Size IN [ "8", "10" ] 
      OR product.Color == "Red"

这种方法将使查询更加容易。但是它有一个缺点,那就是如果有许多不同的产品属性,由于内存限制,您将无法对其中的大多数属性进行索引。如果很少有不同的产品属性,或者所有的搜索条件都使用一些具有足够选择性的公共属性,从而极大地加快了查找速度,这就不是问题。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33078237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档