标签计数集合

时间:2012-05-03 23:54:04

标签: xpages lotus-domino

我想从stackexchange站点复制功能:每次有问题列表时,右侧都会显示其中显示的所有标签的列表,包括其计数(频率)。 是否有任何性能友好的方式,如何在不迭代浏览视图中的每个元素的情况下获取此类信息?假设它应该与公共视图数据源一起使用,并且视图的内容可以通过过滤器(键,类别)或全文来改变。 我已经考虑(并拒绝)了一些解决方案:

  • 迭代收集 - 因性能原因无法使用(特别是如果无法使用ViewNavigator - FT查询)。
  • 对呈现内容中的标记进行计数 - 仅限于可见页面,不计算其他页面的标记(stackexchange计算每个页面的标记)。虽然表现不错。
  • DocumentCollection.intersect - 遍历所有标记和所有文档的交叉集合以及针对源集合的该标记将导致具有此类标记的文档的计数。这种方法是性能杀手。

  • 2 个答案:

    答案 0 :(得分:3)

    您可以使用带有摘要列的分类视图,并在json中查询它。需要崩溃。 ?ReadViewEntries&安培; OUTPUTFORMAT = JSON

    答案 1 :(得分:1)

    我会考虑两种基本方法:

    1. 将标记存储在问题文档的多值摘要文本字段中,根据该字段创建分类视图,打开视图,创建NotesViewNavigator,使用CreateViewNavFromCategory创建仅包含文档的NotesViewNavigator与标记匹配,并获取NotesViewNavigator.count()属性值。

    2. 将标记存储在问题文档中的字段(可以是多值或单值,摘要或非摘要文本,甚至是富文本字段),全文索引数据库,以及使用Database.FTSearch方法,其搜索公式使用FIELD关键字来获取NotesDocumentCollection,并使用NotesDocumentCollection.count()属性。

    3. 对于过滤,我认为后一种方法可能会更好。您可能只需修改FT查询以包含其他条件即可完成过滤。这可能非常灵活,应该非常快。另一方面,使用NotesViewNavigator,您必须遍历NotesViewEntry对象才能进行过滤。