elasticsearch - 在与类型 [doc] 的映射中找不到 [path] 的字段

标签 elasticsearch groovy

我的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] 的映射中找不到 [variant_group.variant_info] 的字段

我尝试使用 containsKey 如下:

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

此脚本 block 返回 0 而不是 1

但是,如果我执行这个:

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

它返回预期的响应 1

集合类型是否存在我遗漏的陷阱,或者我的代码是否存在问题?

谢谢!

最佳答案

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

关于elasticsearch - 在与类型 [doc] 的映射中找不到 [path] 的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54229186/

相关文章:

elasticsearch - Elasticsearch-如何为搜索和索引指定相同的分析器

elasticsearch - 如何在ElasticSearch中标记罗马数字术语?

xml - groovy.xml.MarkupBuilder 禁用 PrettyPrint

java - 从groovy中的外部jar加载JsonBuilder

grails - 从 Maven 原型(prototype)创建 grails 项目

c# - Elasticsearch搜索不区分大小写的字段的确切值

elasticsearch - Elasticsearch-桶选择器聚合不起作用- “must be declared inside of another aggregation”

ruby-on-rails - rails 4,elasticsearch-rails

java - Jenkins 集群中执行者的数量

grails - Groovy元编程