我试图用弹性搜索做些什么,而且无法在任何地方找到答案。
获得嵌套对象产品:
"products": {
"include_in_root": true,
"type": "nested",
"properties": {
"date": {
"format": "strict_date_optional_time||epoch_millis",
"type": "date"
},
"type": {
"index": "not_analyzed",
"type": "string"
},
"cat4": {
"index": "not_analyzed",
"type": "string"
},
"geo": {
"type": "geo_point"
},
"baseprice": {
"type": "long"
},
"cat2": {
"index": "not_analyzed",
"type": "string"
},
"cat3": {
"index": "not_analyzed",
"type": "string"
},
"feeltemp": {
"type": "long"
},
"cat1": {
"index": "not_analyzed",
"type": "string"
},
"price": {
"type": "double"
},
"qty": {
"index": "not_analyzed",
"type": "string"
},
"name": {
"index": "not_analyzed",
"type": "string"
},
"weather": {
"index": "not_analyzed",
"type": "string"
},
"id": {
"index": "not_analyzed",
"type": "string"
},
"stock": {
"type": "long"
},
"brand": {
"index": "not_analyzed",
"type": "string"
}
}
}
我想只在type =' cartadd'和cat1 ="测试"例如。
问题,如果是带嵌套过滤器的查询:
{
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "products",
"filter": {
"bool": {
"must": [
{
"script": {
"script": "sum=0;for(obj in _source.products) {sum = sum + 1 }; sum>=1;"
}
},
{
"term": {
"products.type": "view"
}
}
]
}
}
}
}
]
}
}
}
没有任何意义。
如果我删除了嵌套操作:
{
"query": {
"bool": {
"filter": {
"bool": {
"must": [
{
"script": {
"script": "sum=0;for(obj in _source.products) {if(obj.type=='cartadd') {sum = sum + obj.price }}; sum>=2;"
}
}
]
}
}
}
}
}
它可以工作并计算对象。但我不能再过滤嵌套对象了。
你有没有看到,我在groovy脚本中添加了一个if条件,但我可以动态添加更多条件。
有人知道我该怎么做吗?
非常感谢!
答案 0 :(得分:1)
您需要将script
过滤器移到nested
查询之外,因为它在products
上运行,{
"query": {
"bool": {
"filter": [
{
"script": {
"script": "sum=0;for(obj in _source.products) {sum = sum + 1 }; sum>=1;"
}
},
{
"nested": {
"path": "products",
"filter": {
"term": {
"products.type": "view"
}
}
}
}
]
}
}
}
是父文档的字段(而不是嵌套的字段):
nbProducts
此外,一个好主意是在父文档中添加一个名为{
"query": {
"bool": {
"filter": [
{
"range": {
"nbProducts": {
"gte": 1
}
}
},
{
"nested": {
"path": "products",
"filter": {
"term": {
"products.type": "view"
}
}
}
}
]
}
}
}
的新字段,该字段将包含产品对象的数量。这将允许您摆脱该脚本并执行这样的简单查询:
Restaurant