7

我有一个包含很多元数据字段的架构。我们希望能够通过 Tridion API 从代理中搜索基于该模式的组件,例如:

using Tridion.ContentDelivery.DynamicContent.Query;
private static Criteria getSearchCriteria(
        string searchText,
        params BrokerConstants.MetadataField[] fields)
    var searchCriteria = new List<Criteria>();
    foreach (var f in fields)
    {
        var mkcText = new CustomMetaKeyCriteria(f.Name);
        var mvcText = new CustomMetaValueCriteria(
                mkcText, 
                "%" + searchText + "%",
                Criteria.Like);
        searchCriteria.Add(mvcText);
    }
    return new OrCriteria(searchCriteria.ToArray());
}

到目前为止,这很好用:用户可以输入一些搜索文本,我们通过代理 API 将搜索文本传递给 Tridion,然后 Tridion 将与该搜索文本匹配的组件返回给我们。

但!如果我在任何组件的内容字段中添加大量文本,则 Tridion 发布过程会在“部署”阶段失败:

阶段:部署处理阶段失败,无法部署组件 [Component id=tcm:9-2617-16 title=xyz schema=tcm:9-2325-8],CustomMeta 字段 StringValue 大于支持的 3400 字节大小!

我尝试将代理数据库的 CUSTOM_META 表中的 KEY_STRING_VALUE 列从 nvarchar(3400) 更改为 nvarchar(MAX),但这似乎并没有解决问题。

我根本没有超出限制:“wc”告诉我我的文本中有 4037 个字节。大约 6000 左右听起来对我的需求来说是一个舒适的上限。

有没有一种简单的方法可以增加我在此字段中允许的文本字节数?

4

2 回答 2

10

没有支持的方式来做你希望完成的事情。另外,请记住自定义元的实际目的是什么。在我看来,您通过在列中添加大量内容来滥用它。

无论如何,如果您真的想走这条路,那么您需要联系 Tridion 支持或访问sdltridionworld(需要登录)并下载 CD_2011.1.1.83467(或任何包含 CD_2011.1.1.81125 的修补程序,CD_2011.1.1.83475 除外!!!)。修补程序的变化是它消除了在部署时对元数据大小的硬检查。换句话说,它允许您通过让数据库服务器决定是否允许您在该列中存储这么多内容来对自己进行射击。请注意,Tridion不支持更改数据库列。

希望这可以帮助。

于 2013-02-12T09:14:59.930 回答
5

支持更改代理数据库中列的定义,并且可能会导致您将来的实施出现支持和升级问题。

听起来您正在获取组件的文本内容并将其放入基于文本的元数据字段中,以便在前端提供某种全文搜索功能(如果我错了,请原谅我)。这不一定符合 Content Delivery API 的预期目的。

我建议您参考上一个关于实施自由文本搜索的问题,以及我的回答

于 2013-02-12T09:47:12.397 回答