elasticsearch - 我可以在Elasticsearch中过滤子数组吗?

标签 elasticsearch

我在 flex 搜索中将每个订单的订单和订单产品附加为子数组。当我汇总价格时,我需要有可能在我的订单文件中过滤我的订单产品。

我在Elastic中的文档示例:

{  
   "OrderID":4567488,
   "projectId":"4",
   "Project":"direkt",
   "legacy_id":null,
   "supporterId":null,
   "Origin":"FR",
   "orderProducts":[  
      {  
         "OrderProductID":"15694898",
         "OrderID":"4567488",
         "brandNo":"30",
         "Price":"26.95",
      },
      {  
         "OrderProductID":"15694898",
         "OrderID":"4567488",
         "brandNo":"15",
         "Price":"15.22",
      },
       {  
         "OrderProductID":"15694898",
         "OrderID":"4567488",
         "brandNo":"123",
         "Price":"24.55",
      },
   ]
}

我现在如何过滤:
 {  
      "index":"order_index",
      "from":0,
      "size":100,
      "body":{  
         "query":{  
            "filtered":{  
               "filter":{  
                  "bool":{  
                     "must":[  
                        {  
                           "term":{  
                              "orderProducts.brandNo":"30"
                           }
                        }
                     ],
                  }
               }
            }
         }
      }
   }

我期待什么
{  
   "OrderID":4567488,
   "projectId":"4",
   "Project":"direkt",
   "legacy_id":null,
   "supporterId":null,
   "Origin":"FR",
   "orderProducts":[  
      {  
         "OrderProductID":"15694898",
         "OrderID":"4567488",
         "brandNo":"30",
         "Price":"26.95",
      },
   ]
}

我真正得到的是:

所有文件。

有可能吗要过滤子数组数据?

UPD。

是的,这是我的架构映射:
"mappings":{  
   "order":{  
      "dynamic_templates":[  
         {  
            "strings":{  
               "mapping":{  
                  "type":"string",
                  "fields":{  
                     "raw":{  
                        "index":"not_analyzed",
                        "type":"string"
                     }
                  }
               },
               "match_mapping_type":"string"
            }
         }
      ],
      "properties":{  
         "orderProducts":{  
            "include_in_parent":true,
            "properties":{  
               "OrderProductID":{  
                  "type":"long"
               },
               "OrderID":{  
                  "type":"long"
               },
               "brandNo":{  
                  "type":"long"
               },
               "Price":{  
                  "type":"double"
               }

            },
            "type":"nested"
         },
         "OrderID":{  
            "type":"long"
         }
      }
   }
},

最佳答案

好吧,经过一些实验,我发现可以像这样完成聚合:

 {  
   "aggs":{  
      "sales":{  
         "nested":{  
            "path":"orderProducts"
         },
         "aggs":{  
            "filtered_nestedobjects":{  
               "filter":{  
                  "bool":{  
                     "must":[  
                        {  
                           "terms":{  
                              "orderProducts.brandNo":[  
                                 "30"
                              ]
                           }
                        }
                     ]
                  }
               },
               "aggs":{  
                  "Quantity":{  
                     "sum":{  
                        "field":"orderProducts.Quantity"
                     }
                  }
               }
            }
         }
      }
   }
}

我们可以过滤 flex 的子数组的主要问题的答案是。只有inner_hits我做到了。

关于elasticsearch - 我可以在Elasticsearch中过滤子数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42838254/

相关文章:

elasticsearch - 运行搜寻器时收到 fatal error

elasticsearch - Elasticsearch范围过滤器在日期直方图中不起作用

elasticsearch - mongoosastic 在保存时不索引数据

elasticsearch - 使用C#NEST增加弹性体的磁场极限

symfony - 尝试按GeoDistance进行过滤时出现PartialShardFailureException(foselasticaBundle Symfony2)

elasticsearch - elasticsearch字符串聚合数组

mapping - 将映射应用于 Elasticsearch 中的子字段

elasticsearch - Elasticsearch-查询具有不同术语的主要和次要属性

mongodb - 错误 : mongodb. jdbc.MongoDriver 未加载。你确定你已经包含了正确的 jdbc 驱动程序

elasticsearch - 过滤掉元数据字段,只返回elasticsearch中的源字段