如何在Elasticsearch中获取文档大小(以字节为单位)

普拉萨纳

我是Elasticsearch的新手。我需要获取查询结果的文档大小。

示例:- this is a document. (19bytes). this is also a document. (24bytes) content:{"a":"this is a document", "b":"this is also a document"}(53bytes) 当我在ES中查询文档时。结果我将得到上述文件。因此,两个文档的大小均为32bytes。结果,我需要32bytes在elasticsearch中。

Xeraa

您的文档只包含一个字段吗?我不确定这是否是您想要的100%,但是通常您可以计算字段的长度,然后将其与文档一起存储或在查询时进行计算(但这是一个缓慢的操作,如果可能,我会避免这样做)。

因此,这是一个包含测试文档和字段长度计算的示例:

PUT test/_doc/1
{
  "content": "this is a document."
}

POST test/_update_by_query
{
  "query": {
    "bool": {
      "must_not": [
        {
          "exists": {
            "field": "content_length"
          }
        }
      ]
    }
  },
  "script": {
    "source": """ 
if(ctx._source.containsKey("content")) {
  ctx._source.content_length = ctx._source.content.length();
} else {
  ctx._source.content_length = 0;
}
"""
  }
}

GET test/_search

查询结果如下:

{
  "took" : 6,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "content" : "this is a document.",
          "content_length" : 19
        }
      }
    ]
  }
}

顺便说一句,它有19个字符(其中包括空格和点)。如果要排除这些,则必须向脚本添加更多逻辑。我会对字节BTW保持谨慎,因为UTF8每个字符可能会使用一个以上的字节(例如höhe),并且此脚本实际上仅在计算字符。

然后,您可以轻松地在查询和聚合中使用长度。

如果要计算合并的所有子文档的大小,请使用以下命令:

PUT test/_doc/2
{
  "content": {
    "a": "this is a document",
    "b": "this is also a document"
  }
}

POST test/_update_by_query
{
  "query": {
    "bool": {
      "must_not": [
        {
          "exists": {
            "field": "content_length"
          }
        }
      ]
    }
  },
  "script": {
    "source": """
if(ctx._source.containsKey("content")) {
  ctx._source.content_length = 0;
  for (item in ctx._source.content.entrySet()) {
    ctx._source.content_length += item.getValue().length();
  }
}
"""
  }
}

GET test/_search

请注意,它content可以是文本类型也可以具有子文档,但是您不能混合使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在mongodb中获取文档字段的大小(以字节为单位)

如何使用Node.js获取mongodb单个文档的大小(以字节为单位)?

如何使用elasticsearch中的查询找出索引的大小(以字节为单位)?

如何使用 wc -c 以字节为单位获取文件大小

在Android中获取网页大小(以字节为单位)

在php中获取上传的文件大小(以字节为单位)

如何从java jdbc中的结果集中获取列的大小(以字节为单位)?

获取堆上对象的大小(以字节为单位)

获取文件的总大小(以字节为单位)

如何在nodejs中获取以字节为单位的字符串长度?

如何在bash脚本中以gb为单位获取ram大小?

获取以字节为单位的远程文件的大小?(无内容大小)

如何在find命令中修改-printf“%s \ n”,以MB为单位而不是字节为单位?

如何获取已经以字节为单位的图像的大小和分辨率

在shell中获取文件大小(以字节为单位)的可移植方式?

如何在wxpython中以%为单位绘制布局大小

Python:获取字符串大小(以字节为单位)

使用 ptrace 动态获取以字节为单位的指令大小

获取C ++模板参数包的总大小(以字节为单位)

Clob大小(以字节为单位)

如何获取以MB为单位的文件大小?

如何获取以kb为单位的位图大小

如何使用Safari 7 Web Inspector在UIWebView中查看资源的大小(以字节为单位)?

如何在Android中以像素为单位获取屏幕尺寸

如何在 Python 中以分钟为单位获取时差

如何在纯JavaScript中获取以像素为单位的高度?

如何在Java中以秒为单位获取UTC时间?

如何在pyspark中以秒为单位获取datediff()?

如何在Excel中以分钟为单位获取时差?