2

我有数十亿行的 phonorgraph 对象,我们正在通过对象集服务查询它,例如,我想从某个城市获取所有 DriverLicences。

        @Function()
        public getDriverLicences(city: string): ObjectSet<DriverLicences> {
            let drivers = Objects.search().DriverLicences().filter(row => row.city.exactMatch(city));
            return drivers ;
        }

当我尝试从 slate 查询它时,我遇到了这个错误:

ERROR 400: {"errorCode":"INVALID_ARGUMENT","errorName":"ObjectSet:PagingAboveConfiguredLimitNotAllowed","errorInstanceId":"0000-000","parameters":{}}

我知道我可能要检索超过 100 000 个结果,但我需要所有结果,因为前面实现的逻辑是由另一个团队构建的复杂板岩仪表板,我们无法重构。

4

1 回答 1

2

这里的问题是,特别是在 Slate <> Function 连接器中,有一个“翻译层”,它序列化对象集的内容并提供一个响应数据结构,该结构具体化集合中每个对象的属性:值对。

这显然不适用于大型对象集,因为向浏览器中投入大量数据可能会使分配给选项卡的资源不堪重负。

从上下文来看,您可能正在将现有的 Slate 应用程序迁移到 Functions;在当前版本中,查询如何限制返回的结果数量?肯定不能返回几十万个结果在前端做进一步处理吧?(如果是这样,那可能是考虑寻址的反模式)。

至于您当前可以探索的选项,您可以对对象集进行排序,然后指定一个较小的返回限制:

Objects.search().DriverLicences().filter(row => row.city.exactMatch(city)).orderBy(date_of_issue).take(100)

您可以在 Ontology API 的 Functions 文档参考条目中找到更多详细信息: Ordering and limited部分中的对象集

您甚至可以ObjectSet通过使用在 (ie) 上排序的属性中的最后一个值作为后续请求date_of_issue中的过滤器并返回下一个对象来解决(当前)缺少分页的问题。N

如果您需要在一组结果上呈现的 Slate 表格或 HTML 小部件,然后在用户操作上获取下一页,这可以工作。

于 2022-01-27T16:48:30.127 回答