Xpages介绍如何对视图中预选的大量数据进行排序

Xpages介绍如何对视图中预选的大量数据进行排序,xpages,lotus-domino,Xpages,Lotus Domino,我有一个具有以下视图的domino数据库: Project_no Realization_date Author 1/2005 2015-01-02 Alex/Acme 3/2015 2015-02-20 John/Acme 33/2015 2016-06-20 Henry/Acme 44/2015 2015-02-13 John/Acme ... 现在我想从

我有一个具有以下视图的domino数据库:

Project_no    Realization_date    Author
1/2005        2015-01-02          Alex/Acme
3/2015        2015-02-20          John/Acme
33/2015       2016-06-20          Henry/Acme
44/2015       2015-02-13          John/Acme
...
现在我想从这个视图中获取所有以“3”(部分匹配)开始的项目,按实现日期降序对它们进行排序,并在Xpage上显示前1000个项目

视图很大-一些选择可以为我提供500.000个文档

FT搜索视图选项不可接受,因为它仅返回5000份文档

ArrayList或ListMap的创建导致java内存不足异常(java Domino对象被回收)。当然,超过内存可能会有所帮助,但我们有3万用户,因此可能不够


你有什么办法可以做到这一点吗?

适当的回收应该可以,但是


您还可以“还原”为ex?yourviewname?ReadViewEntries&startkey=3&outputformat=JSON的经典Domino URL,并通过某种Javascript UI组件呈现JSON,适当的循环应该可以,但是


您还可以“还原”为ex?yourviewname?ReadViewEntries&startkey=3&outputformat=JSON的经典Domino URL,并通过某种Javascript UI组件呈现JSON,适当的循环应该可以,但是


您还可以“还原”为ex?yourviewname?ReadViewEntries&startkey=3&outputformat=JSON的经典Domino URL,并通过某种Javascript UI组件呈现JSON,适当的循环应该可以,但是


您还可以“还原”为ex?yourviewname?ReadViewEntries&startkey=3&outputformat=JSON的经典Domino URL,并通过某种Javascript UI组件呈现JSON。我会为您的视图优化数据结构。例如,制作一个
ArrayList
,它将表示视图中的最小信息。它模仿索引。“视图条目”不是Notes对象(Document,ViewEntry),而是一个简化的POJO,它将保存足够的信息(通过comparator)对其进行排序,并显示或查找真实数据,例如要显示的主题列和打开该文档的链接的UNID。
这个结构应该适合每个文档几百个字节。麻烦的部分是填充该结构-即使使用ViewNavigator,构建这样的列表也可能需要几分钟。

我会为您的视图优化数据结构。例如,制作一个
ArrayList
,它将表示视图中的最小信息。它模仿索引。“视图条目”不是Notes对象(Document,ViewEntry),而是一个简化的POJO,它将保存足够的信息(通过comparator)对其进行排序,并显示或查找真实数据,例如要显示的主题列和打开该文档的链接的UNID。
这个结构应该适合每个文档几百个字节。麻烦的部分是填充该结构-即使使用ViewNavigator,构建这样的列表也可能需要几分钟。

我会为您的视图优化数据结构。例如,制作一个
ArrayList
,它将表示视图中的最小信息。它模仿索引。“视图条目”不是Notes对象(Document,ViewEntry),而是一个简化的POJO,它将保存足够的信息(通过comparator)对其进行排序,并显示或查找真实数据,例如要显示的主题列和打开该文档的链接的UNID。
这个结构应该适合每个文档几百个字节。麻烦的部分是填充该结构-即使使用ViewNavigator,构建这样的列表也可能需要几分钟。

我会为您的视图优化数据结构。例如,制作一个
ArrayList
,它将表示视图中的最小信息。它模仿索引。“视图条目”不是Notes对象(Document,ViewEntry),而是一个简化的POJO,它将保存足够的信息(通过comparator)对其进行排序,并显示或查找真实数据,例如要显示的主题列和打开该文档的链接的UNID。
这个结构应该适合每个文档几百个字节。麻烦的部分是填充该结构-即使使用ViewNavigator,构建这样的列表也可能需要几分钟。

我认为关键在于用户希望对输出做什么,正如Frantisek所说

如果是为了导出,我会导出数据而不进行排序,然后在电子表格中进行排序

如果是为了显示,我希望会涉及一些分页,否则将需要很长时间才能将HTML从服务器推送到浏览器,因此我建议在特定范围内对Project_no和Realization_date进行FT搜索,并“分块”您的请求。您将需要一个手动寻呼机来加载下一组结果,但是如果您期望有那么多结果,那么您将无法得到一个计算总页数的寻呼机

此外,如果它是XAgent或一次显示所有内容,请在相关XPage上设置viewState=“nostate”。否则,每个请求都将被序列化到磁盘。因此,搜索结果会被序列化到磁盘/内存,这可能是导致您看到的Java内存问题的原因

请记住,可以在服务器上修改FT_MAX_SEARCH_RESULTS notes.ini变量,将(默认)最大值从5000增加到5000

500000是一个非常高的结果集,可能不会使其对任何后续操作非常友好。我可能还建议限制搜索,例如强制单独输入“2015”部分或防止只输入一个数字,因此必须是“30”而不是“3”。这可能还意味着修改您的视图,使项目编号格式显示为
@Right(“0000”+@Left(项目编号“/”),4)
,这样用户就不会得到3、30、31、32…300、301、302…,而是可以搜索“003”,只找到30、31、32…、39。这实际上取决于用户想要做什么,可能需要一些跳出框框的思考,以便快速让他们访问他们想要操作的目标文档集
..
View view = currentDb.getView( "projectsView" );
view.setAutoUpdate( false );

ViewEntryCollection filteredCollection = view.getAllEntriesByKey( userFilter, False );
// Use index where view is sorted by realization_date
view.resortView( "realization_date" );

// All entries sorted by realization_date
ViewEntryCollection resortedCollection = view.getAllEntries();

resortedCollection.intersect( filteredCollection );
// resortedCollection now contains only the entries in filteredCollection, sorted by realization_date
..