0

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

  • 遍历集合 - 出于性能原因无法使用(特别是如果 ViewNavigator 无法使用 - FT 查询)。
  • 计算呈现内容中的标签 - 仅限于可见页面,不计算其他页面的标签(stackexchange 计算每个页面的标签)。不过表现不错。
  • DocumentCollection.intersect - 遍历所有标签,并将所有带有该标签的文档的集合与源集合相交,将导致带有此类标签的文档计数。这种方法是性能杀手。

  • 4

    2 回答 2

    3

    您可以使用带有摘要列的分类视图并在 json 中查询它。需要折叠。?ReadViewEntries&Outputformat=json

    于 2012-05-04T03:51:42.670 回答
    1

    我会考虑两种基本方法:

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

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

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

    于 2012-05-04T04:11:23.450 回答