在ElasticSearch中检索最大文档大小

q8l4jmvw  于 2023-08-03  发布在  ElasticSearch
关注(0)|答案(2)|浏览(143)

是否可以在ElasticSearch中使用单个查询检索最大的文档(或仅其大小)?
这样做的动机是在MySQL存储中缓存返回的文档,所以我想知道最大文档的数量级,以决定是否使用TEXTMEDIUMTEXTLONGTEXT
编辑:这是在ES 1.3上。

jm81lzqq

jm81lzqq1#

据我所知,没有这种开箱即用的可能性。
但是,您可以尝试scripted aggregation,其中聚合的值是所有字段(或您关心的所有字段)的长度之和。
另一个选择:尝试为文档设置脚本排序顺序。例如:

"sort": {
    "_script": {
        "script": "doc['field1'].value.size() + doc['field2'].value.size()",
        "type": "number",
        "order": "desc"
    }
}

字符串

wlsrxk51

wlsrxk512#

我粗略的快速方法是通过reindex创建一个新的临时索引,添加一个具有字符串表示大小的新字段:

POST _reindex
{
  "source": {
    "index": "input_index"
  },
  "dest": {
    "index": "docs_size_index"
  },
  "script": {
    "source": """
      HashMap st = ctx._source;
      if (st != null){
        ctx._source['docsize'] = st.toString().length();
      } else { 
        ctx._source['docsize'] = 0;
      }
    """
  }
}

字符串
然后在使用排序的同时查询这个新的临时索引。

GET docs_size_index/_search
{
  "_source": {
    "includes": "['docsize']"
  },
  "sort": [
    {
      "docsize": {
        "order": "desc"
      }
    }
  ]
}


第一个元素将是索引中最大的文档,然后可以检索并获得实际大小
第一个月

相关问题