elasticsearch |高效分页,文档数超过10k

qxsslcnc  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(0)|浏览(224)

我有一个微服务与ElasticSearch作为后端商店。现在我有多个索引,其中插入了数十万个文档。
现在我需要为这些索引公开get api。 GET /employees/get . 我已经通过es分页使用滚动和搜索后。但它们都需要滚动id和搜索(key)等元信息来分页。
现在的问题是我的微服务不应该暴露这些滚动ID或搜索。使用当前的方法,我可以列出多达1万个文档,但不能在之后列出。我也不想让microservice的用户知道后端商店或任何有关它的事情。那么如何在elasticservice中实现这一点呢?
我有以下想法:
将scroll\u id存储在内存中,并基于该id检索结果以供后续查询。get查询如下: GET /employees/get?page=1 默认情况下,每页将有10k个文档。
在getapi上实现内部滚动api,并将所有匹配的文档返回给用户。但这会增加延迟和记忆。因为有时我可能会在一次通话中就把10万份文档返回给用户。
使用搜索字符串公开get api。默认情况下,返回10k个文档,结果将用searchstring刷新,如下所述:
让我们说 GET /employees/get 归还10万份文件。并接受查询字符串,用n gram丰富类似10k的自动建议。然后我们每次都显示最有效的10k文档。我知道这不是真正的分页,但不知何故,这也解决了一个黑客的方式的问题。这是我的b计划。
编辑:这是我的用例:返回公司员工列表。有超过10万名员工。所以我必须把结果以页的形式返回。 GET /employees/get?from=0&size=1000 以及 GET /employees/get?from=1001&size=1000 但是一旦我从+size到10k,es就会拒绝这个查询。
请建议什么是在microservice中实现分页的理想方法,以es作为后端存储,并且不让用户知道es的内部结构。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题