groovy 在类型为[doc]的Map中找不到[path]的字段

9ceoxa92  于 2022-11-01  发布在  其他
关注(0)|答案(2)|浏览(132)

我的ES文档模型如下

"hits": [
          {
             "_source": {
                "variant_group": {
                   "variant_info": [
                      {
                         "name": "Toothpaste",
                         "inventory": 10
                      }
                   ],
                   "type_id": 1365
                }
             },
     ]

当我尝试在排序中执行以下查询时:

{
     "_script": {
        "type": "number",
        "order": "desc",
        "script": {
           "lang": "groovy",
           "inline": "return doc['variant_group.variant_info'].values.any{ it -> it.inventory > 0 }"
        }
     }
  }

引发以下错误在类型为[merchant_variant_group]的Map中找不到[variant_group.variant_info]的字段
我尝试按如下方式使用containsKey

{
 "_script": {
"type": "number",
"order": "desc",
"script": {
   "lang": "groovy",
   "inline": "return doc.containsKey('variant_group.variant_info') ? 1 : 0"
}
 }
  }

此脚本块返回0,而不是1
但是,如果执行以下命令:

{
 "_script": {
"type": "number",
"order": "desc",
"script": {
   "lang": "groovy",
   "inline": "return doc.containsKey('variant_group.type_id') ? 1 : 0"
}
 }
  }

它返回预期的响应1
是不是我遗漏了一个集合类型的问题,或者我的代码有什么问题?
谢谢你!

ibrsph3r

ibrsph3r1#

您应该使用“doc['variant_group '] ['variant_info']”或“doc.variant_group. variant_info”来代替“doc['variant_group. variant_info']”。我也很幸运地使用了“_source.variant_group.variant_info”。

ntjbwcob

ntjbwcob2#

我不知道为什么,但这样的模式对我起了作用:我改用:

"inline": "doc['some_array'].values.size()"

这是:

"inline": "doc['some_array.any_field'].size()"

请尝试:

{
     "_script": {
        "type": "number",
        "order": "desc",
        "script": {
           "lang": "groovy",
           "inline": "return doc['variant_group.variant_info. inventory'].any{ inv -> inv > 0 }"
        }
     }
  }

相关问题