是否可以在ElasticSearch中使用单个查询检索最大的文档(或仅其大小)?这样做的动机是在MySQL存储中缓存返回的文档,所以我想知道最大文档的数量级,以决定是否使用TEXT,MEDIUMTEXT或LONGTEXT。编辑:这是在ES 1.3上。
TEXT
MEDIUMTEXT
LONGTEXT
jm81lzqq1#
据我所知,没有这种开箱即用的可能性。但是,您可以尝试scripted aggregation,其中聚合的值是所有字段(或您关心的所有字段)的长度之和。另一个选择:尝试为文档设置脚本排序顺序。例如:
"sort": { "_script": { "script": "doc['field1'].value.size() + doc['field2'].value.size()", "type": "number", "order": "desc" } }
字符串
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" } } ] }
型第一个元素将是索引中最大的文档,然后可以检索并获得实际大小第一个月
2条答案
按热度按时间jm81lzqq1#
据我所知,没有这种开箱即用的可能性。
但是,您可以尝试scripted aggregation,其中聚合的值是所有字段(或您关心的所有字段)的长度之和。
另一个选择:尝试为文档设置脚本排序顺序。例如:
字符串
wlsrxk512#
我粗略的快速方法是通过reindex创建一个新的临时索引,添加一个具有字符串表示大小的新字段:
字符串
然后在使用排序的同时查询这个新的临时索引。
型
第一个元素将是索引中最大的文档,然后可以检索并获得实际大小
第一个月