Tridion Taxonomy 查询示例的任何好的来源

Posted

技术标签:

【中文标题】Tridion Taxonomy 查询示例的任何好的来源【英文标题】:Any good sources for Tridion Taxonomy query examples 【发布时间】:2012-05-06 14:54:18 【问题描述】:

我有一个场景,我发布了数千个按特定类别/关键字分类的组件演示文稿,但这些组件还具有与定义顶部 n 相关的自定义元数据字段。将显示。本质上,我需要根据关键字过滤一组组件,根据自定义元数据对它们进行排序,只选择前 N 个。

我了解如何列出项目并创建基本过滤器(从 API 中的过滤器项目列表),但我需要过滤元数据字段(例如具有 最新 元数据的三个项目“优先日期”)。

根据我正在阅读的内容,我应该从分类搜索中获取所有记录(使用 TaxonomyKeywordCriteria),然后手动(对 QueryRunner 执行 SQL)检索所有组件的元数据以进行过滤/排序。

我肯定错过了一些东西(感觉不对,有 1/2 API 调用,然后在页面 SQL 脚本中)...如果没有,QueryRunner 查询是否会与分类 Query.executeQuery 的结果一起缓存()

示例代码:

ItemTypeCriteria isComponent = new ItemTypeCriteria(16);
TaxonomyKeywordCriteria taxonomyKeywordCriteria = new TaxonomyKeywordCriteria(taxURI, taxKeywordURI, true);
Criteria[] allCriteria = isComponent, isTDIPublication, isArticle, taxonomyKeywordCriteria; 
AndCriteria andCriteria = CriteriaFactory.And(allCriteria);
Query query = new Query();         
query.setCriteria(andCriteria);

【问题讨论】:

我们应该假设您的元数据不是关键字驱动的吗?我设计了我的模式以最大限度地利用类别和关键字,因此您可以将关键字添加到大型 AND 查询中。您可能还想考虑可以使用自定义元查询的标准代理查询。它们可能比 Taxonomy API 更适合您 从您的个人资料来看,您似乎没有加入位于 51 区的基于 SDL Tridion 的 Stack Exchange 站点的倡议 - 请考虑在 area51.stackexchange.com/proposals/38335/… 干杯克里斯。我一直在研究标准的代理查询,并且直觉我们正在朝着这个方向前进——当然,当我们达到一半使用分类查询然后根据 API 返回的内容抛出 SQL 选择时。 .. 是否有任何缓存影响 - 我认为 Tridion 对象缓存会为我们解决这个问题。就元数据而言,在这种情况下,它不是关键字驱动的(出于兴趣,这有什么意义?)。 【参考方案1】:

在您的 JSP 中使用 SQL 似乎并不合适,因为它是数据层逻辑,不应出现在演示文稿中。此外,如果 Tridion 使用新版本更新数据库结构,则您的自定义 SQL 可能会停止工作。您最好使用 Broker API,而不是依赖于 Broker DB 中的自定义 SQL 语句。

我认为最好的办法是尽量减少所需的数据库命中次数。 API 允许按关键字过滤(您也可以按自定义元进行过滤,但这对您没有帮助,因为您提到要按给定的自定义元字段排序)。您有两个选项可以按关键字获取 CP 列表,然后您可以对其进行排序:

    Query.execureQuery()。这将返回一个 tcm URI 列表,这意味着必须进行单独的 DB 命中来检索 CustomMetadata 对象和 CP (ComponentPresentationFactory.GetComponentPresetation(tcmUri))。在所有内容都被充分缓存之前,这可能(并且可能会)变得很重。 ComponentPresentationFactory.getTaxonomyComponentPresentations()。您可以将一组关键字传递给此方法并获取更大的 CP 集。这意味着一个快速的数据库查询。在 CM 方面,在组件模板中添加自定义元字段值的呈现作为 html 注释。然后回到交付端,只需从返回集的每个 CP 中解析出该值,并在应用程序服务器(而不是 DB)上进行排序。这将比执行许多数据库查询更快。

您的问题主题要求提供一些分类查询示例。查看 2011 文档中的 sdllivecontent 门户。 API 与 2009 年的 API 几乎相同(只有细微的差别,但是,这里提供了一些关于构建过滤器的示例: http://sdllivecontent.sdl.com/LiveContent/web/pub.xql?action=home&pub=SDL_Tridion_2011&lang=en-US#addHistory=true&filename=DevelopingAFilter.xml&docid=concept_0AB6D192D7AB4EC18892631F519EF1DD&inner_id=&tid=&query=&scope=&resource=&eventType=lcContent.loadDocconcept_0AB6D192D7AB4EC18892631F519EF1DD

如果您浏览主题,sdltridionworld 论坛是另一个好地方。以下是一些带有示例代码的线程:

    https://forum.sdltridion.com/topic.asp?TOPIC_ID=6690&SearchTerms=taxonomy,query https://forum.sdltridion.com/topic.asp?TOPIC_ID=5619&SearchTerms=taxonomy,query

【讨论】:

以上是关于Tridion Taxonomy 查询示例的任何好的来源的主要内容,如果未能解决你的问题,请参考以下文章

html taxonomy.html示例

在 Tridion 代理查询上应用不止一种排序

xml SDL Tridion 2011/2013 SmartTarget的CD logback配置示例。我用它来解决开发现状上的SmartTarget问题

xml SDL Tridion 2011/2013 SmartTarget的CD logback配置示例。我用它来解决开发现状上的SmartTarget问题

xml SDL Tridion 2013 SP1中cd_storage_conf.xml的项类型映射示例

xml SDL Tridion 2013 SP1中cd_storage_conf.xml的项类型映射示例