elasticsearch ElasticSearch |使用超过10k的文档进行高效分页,elasticsearch,lucene,nosql,microservices,elasticsearch,Lucene,Nosql,Microservices" /> elasticsearch ElasticSearch |使用超过10k的文档进行高效分页,elasticsearch,lucene,nosql,microservices,elasticsearch,Lucene,Nosql,Microservices" />

elasticsearch ElasticSearch |使用超过10k的文档进行高效分页

elasticsearch ElasticSearch |使用超过10k的文档进行高效分页,elasticsearch,lucene,nosql,microservices,elasticsearch,Lucene,Nosql,Microservices,我有一个以elasticsearch为后端商店的微服务。现在我有了多个索引,在这些索引中插入了数十万个文档 现在我需要为这些索引公开GETAPI获取/员工/获取。 我已经用滚动和搜索完成了ES分页。但它们都需要滚动id和(键)后搜索等元信息来进行分页 现在的问题是我的微服务不应该公开这些滚动ID或搜索。按照目前的方法,我最多可以列出10万份文档,但不能超过10万份。我不想让microservice的用户知道后端商店或任何有关它的信息。那么如何在elasticservice中实现这一点呢 我的想法

我有一个以elasticsearch为后端商店的微服务。现在我有了多个索引,在这些索引中插入了数十万个文档

现在我需要为这些索引公开GETAPI<代码>获取/员工/获取。 我已经用滚动和搜索完成了ES分页。但它们都需要滚动id和(键)后搜索等元信息来进行分页

现在的问题是我的微服务不应该公开这些滚动ID或搜索。按照目前的方法,我最多可以列出10万份文档,但不能超过10万份。我不想让microservice的用户知道后端商店或任何有关它的信息。那么如何在elasticservice中实现这一点呢

我的想法如下:

  • 将scroll_id存储在内存中,并根据该id检索结果以供后续查询。Get查询将如下所示:
    GET/employees/GET?page=1
    默认情况下,每页将有10k个文档

  • 在GetAPI上实现内部滚动API,并将所有匹配的文档返回给用户。但这会增加延迟和内存。因为有时我可能会在一次通话中向用户返回10万份文档

  • 使用搜索字符串公开GET API。默认情况下,返回10k个文档,然后使用searchstring刷新结果,如下所述:

假设
GET/employees/GET
返回10k文档。并接受查询字符串,以使用n gram丰富类似10k的自动建议。然后我们每次都会显示最有效的10k文档。我知道这不是真正的分页,但不知何故,这也解决了一个黑客的方式的问题。这是我的B计划

编辑: 这是我的用例: 返回公司员工的列表。有超过10万名员工。所以我必须以页面的形式返回结果
GET/employees/GET?from=0&size=1000
GET/employees/GET?from=1001&size=1000
但一旦我从+size扩展到10k,ES就会拒绝查询


请建议使用ES作为后端存储在microservice中实现分页的理想方法,并且不让用户知道ES的内部信息。

search\u after
只需要排序值,这是在任何情况下都会返回给客户端的一条信息。它不像scroll\u id那样更加模糊。是的,但我不会将sort\u值返回给用户。然后,我必须在内部存储这些排序值。用户不知道排序,也不应该知道。您可以随时增加该限制,看看它是否适合您的性能。但在我看来,真正需要问的问题是,为什么您需要返回超过10000份文档?难道没有可以设计不同的东西吗?你提到了B计划,它会起作用。。。你能更详细地解释你的用例吗?更新了我的用例。是的,到目前为止,B计划正在发挥作用。基本上,我正在基于过滤器丰富结果。和department一样,project为用户筛选更合适的结果。考虑到scroll的内存开销,我们不应该在这个用例中使用scroll。会话时间可能是用例的另一个瓶颈。->您更愿意在之后进行一次数据获取
search\u,只需要排序值,这是在任何情况下都会返回给客户端的一条信息。它不像scroll\u id那样更加模糊。是的,但我不会将sort\u值返回给用户。然后,我必须在内部存储这些排序值。用户不知道排序,也不应该知道。您可以随时增加该限制,看看它是否适合您的性能。但在我看来,真正需要问的问题是,为什么您需要返回超过10000份文档?难道没有可以设计不同的东西吗?你提到了B计划,它会起作用。。。你能更详细地解释你的用例吗?更新了我的用例。是的,到目前为止,B计划正在发挥作用。基本上,我正在基于过滤器丰富结果。和department一样,project为用户筛选更合适的结果。考虑到scroll的内存开销,我们不应该在这个用例中使用scroll。会话时间可能是用例的另一个瓶颈。->希望这是一次数据提取