繁体   English   中英

在Node.js中从Elasticsearch获取大数据

[英]Fetching large data from Elasticsearch in Node.js

我正在通过他们的Node.js客户端从Elasticsearch(v7)的索引ABC中获取约60,000文档。 我尝试使用他们推荐的Scroll API,但这花了将近20s 接下来,我将索引ABCmax_window_size增加到100,000 (从默认的10,000 ),查询花费了5s

我正在8核32GB RAM的机器上运行Elasticsearch v7。 我没有执行任何聚合,我的查询只是一个简单的GET请求,可从索引ABC提取所有文档。 有没有办法通过他们的Node.js客户端将其加速到不到一秒钟?

我在Express中的代码

const { body } = await client.search({
  index: 'ABC',
  size: 60000,
  body: {
     query: {
        match_all: {}
     }
  },
});
res.send(body.hits.hits);

如果没有其他方法可以减少时间,我是否应该将整个响应缓存在内存中,并让UI从中读取而不是直接访问ES(数据每天仅更新一次,所以我可能不需要执行缓存验证)。 我应该为此找Redis吗?

尽管我不确定您的用例是什么,但是scroll API可能不适用于为网页提供服务的Web服务器。 要在文档中引用此页面

滚动并不旨在用于实时用户请求,而是用于处理大量数据,例如,以便将一个索引的内容重新索引为具有不同配置的新索引。

相反,您应该使用from / size参数对结果进行分页 当用户界面需要显示更多项目时,您应该提交另一个API请求,以通过适当增加from参数来拉出另一个页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM