我正在尝试从ES查询大约15万个文档。我的150k文档总共有9.24GB的磁盘空间,我正在使用滚动API,每滚动获取10'000。查询并花费5分钟以上的时间,然后遇到内存问题(需要6GB以上的RAM)。现在,我尝试了几种方法:
_source:常规过滤。在每个文档的70个键值对中,我只需要4个字段
{
"size": 10000,
"query": {
"range": {
"updateTime": {
"lte": 10000000000000000
}
}
},
"_source": [
"id.identifierOne",
"id.identifierTwo",
"arrivalTime",
"updateTime"
],
"sort": [
"_doc"
]
}
_stored_field:为了省去完整文档的巨大开销,我在创建索引期间存储了4个字段
{
"size": 100000,
"stored_fields": [
"updateTime",
"id.identifierOne",
"id.identifierTwo",
"arrivalTime"
],
"query": {
"range": {
"updateTime": {
"lte": 10000000000000000
}
}
},
"sort": [
"_doc"
]
}
两者运行时间相同。我在_source版本中发现的另一件奇怪的事情是,每滚动10,000次,就会导致下一批查询的查询时间更长,并增加了RAM。
我强烈怀疑我的配置或查询中有错误。等待几分钟似乎太长了。
我的配置是:仅在一个节点上有5个分片。带有6GB RAM的Pod可扩展到2CPU。索引创建就是这样
{
"mappings": {
"doc": {
"dynamic": "false",
"properties": {
"id.identifierOne": {
"type": "long",
"store": true
},
"id.identifierTwo": {
"type": "text",
"store": true
},
"arrivalTime": {
"type": "long",
"store": true
},
"updateTime": {
"type": "long",
"store": true
}
}
},
"settings" : {
"index" : {
"number_of_replicas" : 0
}
}
}
是否可以将查询时间减少到一分钟以内?
任何帮助或想法都受到高度赞赏。