2013-11-22 53 views
0

我正尝试使用elasticsearch为电子商务网站构建方面导航。在结果集中获取elasticsearch嵌套对象的值

商店产品可以有多个变种。我想到的文档结构如下所示:

PUT /products_test/product/1 
{ 
    "id": "1", 
    "manufacturer": "foobar", 
    "categories": [ 
        "28554568", 
        "28554577", 
        "28554578" 
    ], 
    "variants": [ 
    { 
     "id": "1_a", 
     "color": "blue", 
     "size": "L" 
     "price": "67.99" 
    }, 
    { 
     "id": "1_b", 
     "color": "red", 
     "size": "L" 
     "price": "69.99" 
    } 
    ] 
} 

我将变体定义为嵌套类型。这样,下面的查询将返回包含一个变体相匹配的过滤器的所有文件:

POST /products_test/product/_search 
{ 
    "query": { 
    "filtered": { 
     "query": {"match_all": {}}, 
     "filter": { 
      "and": [ 
      {"term": {"categories": "28554568"}}, 
      {"terms": { 
       "variants.color": [ 
       "red" 
       ] 
      }} 
      ] 
     } 
    } 
    } 
} 

现在,我真的想获得的是,为了显示对产品的变型匹配过滤器的变体的ID在类别页面上。所以在这个例子中,我希望返回第二个变体(1_b)的id。我只获取结果集中返回的文档的id。有没有什么方法可以从嵌套对象中定义一个值,并返回呢?

回答

1

目前没有办法获取与查询匹配的嵌套文档。这是一个known issue和工作/思想已经给予解决它。这个问题的当前状态是Elasticsearch的获取阶段需要被重构以支持这个特性。

这很重要,会发生,因为重构也会使elasticsearch的其他部分受益,但它是一个重要的重构。目前没有ETA可用时间。

我会考虑非规范化您的数据,以便每个变体包含“根对象”数据,然后在您的客户端内进行分组。

或者,你可以调查父/子映射,但类似的一些限制(不能确定哪些孩子相匹配的has_child查询),但它确实给多一点灵活性,因为孩子们可以搜索

+0

感谢独立文件信息 – user1036651