我正在跟踪商店访客的订单,对于每个订单,我都会将文档放入这样的索引中:
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版