获取文档,其中过滤的嵌套文档中的值之和与指定条件匹配

时间:2019-06-26 13:58:10

标签: elasticsearch

我正在跟踪商店访客的订单,对于每个订单,我都会将文档放入这样的索引中:

DELETE visitor_carts

PUT visitor_carts
{
  "mappings" : {
    "_doc": {
      "properties" : {
        "order_id": {
          "type": "text"
        },
        "products": {
          "type": "nested",
          "properties": {
            "event_quantity": {
              "type": "long"
            },
            "event_value": {
              "type": "float"
            },
            "product_id": {
              "type": "text"
            },
            "product_lists": {
              "type": "text"
            },
            "product_name": {
              "type": "text"
            }
          }
        },
        "visitor_id": {
          "type": "text"
        }
      }
    }
  }
}

示例文档将如下所示:

PUT visitor_carts/_doc/1
{
  "visitor_id" : "VisitorUid_1",
  "order_id" : "1000",
  "products" : [
    {
      "product_id" : "10_6",
      "product_name" : "product_10_6",
      "event_value" : 100.56,
      "event_quantity" : 4,
      "product_lists" : [
        "1"
      ]
    },
    {
      "product_id" : "10_6",
      "product_name" : "product_10_6",
      "event_value" : 11,
      "event_quantity" : 2,
      "product_lists" : [
        "42"
      ]
    }
  ]
}

在访问者进行的许多购买中,我想获取符合特定条件的产品的文件数:

  • 仅评估product_lists中带有“ 42”的产品
  • 将这些产品的价值加event_value,并且必须在例如100.00到200.00之间才能满足条件
  • 将这些产品的数量加event_quantity,并且必须在2到4之间才能满足条件

我的直觉告诉我,一旦我在选择特定的visitor_id的情况下进行了初始查询,就必须对查询结果应用过滤器,也许可以使用无痛脚本来评估每个产品并比较结果带有一组参数(product_lists值,event_value的范围和event_quantity的范围),但是我已经坐了几天了,但无法使它正常工作,因为对嵌套文档进行操作。到目前为止,我所要做的就是为给定的访问者获取所有嵌套文档的计数,但这甚至与我所需的资源还差得很远。

请帮助,也许有更好的方法。到目前为止,我已经达到了这样的目标,但这离家很远:

POST visitor_carts/_search
{
  "query" : {
    "bool": {
      "must": [
        {
          "term": {
            "visitor_id": "VisitorUid_1"
          }
        },
        {
         "nested": {
           "path": "products",
           "query": {
             "bool": {
               "must": [
                 {
                   "term": {
                     "products.product_lists": "42"
                   }
                 }
               ]
             }
           }
         }
        }
      ]
    }
  }
}

我正在使用6.5版

0 个答案:

没有答案