如何在 ElasticSearch 的脚本中访问文档 ID?

How to access document id in a script in ElasticSearch?

我正在尝试编写一个聚合文档类型的查询。问题是,文档类型可以从文档 id 中获得——它是 id 的前 4-5 个字符,比如 BPR::fawL5CcPE72Wf3m93hUg2。
这是我放在一起的查询:

{
    "query": {
        "match_all": { }
    },
    "aggregations": {
        "by_document_type": {
            "script": {
                "script": "doc['_id'].value.substring(0, 3)",
                "order": { 
                    "_count": "desc" 
                }
            }
        }
    }
}

但它说 Parse Failure [Could not find aggregator type [script] in [by_document_type]]];

我做错了什么?

您只需使用 terms aggregation 并在其中输入您的脚本:

{
  "query": {
    "match_all": {}
  },
  "aggregations": {
    "by_document_type": {
      "terms": {
        "script": "doc['_id'].value.substring(0, 3)",
        "order": {
          "_count": "desc"
        }
      }
    }
  }
}