2013-02-12 8 views
7

Ich habe ein Schema mit vielen Metadatenfeldern. Wir wollen für Komponenten auf der Basis suchen können, auf diesem Schema vom Broker über den Tridion-API wie:Wie kann ich mehr als 3400 Bytes Text in ein Feld im Tridion Broker einfügen?

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()); 
} 

Dies funktioniert so weit: der Benutzer eine Suchtext eingeben kann, geben wir den Suchtext durch zu Tridion über die Broker-API, und Tridion gibt uns die Komponenten zurück, die mit diesem Suchtext übereinstimmen.

Aber! Wenn ich eine Menge Text auf den Inhalt Feld für jede Komponente hinzufügen, schlägt der Tridion-Publishing-Prozess bei der „Bereitstellung“ Phase:

Phase: Deployment Verarbeitungsphase gescheitert, bereitstellen kann nicht Komponente [Komponente id = tcm : 9-2617-16 title = xyz schema = tcm: 9-2325-8], CustomMeta Feld, StringValue, ist größer als die unterstützte Größe von 3400 Bytes!

Ich versuchte, die KEY_STRING_VALUE Spalte in den Broker-Datenbanken CUSTOM_META Tabelle von nvarchar (3400) zu nvarchar (MAX) zu ändern, aber das scheint nicht das Problem behoben zu haben.

Ich überschreite die Grenze überhaupt nicht sehr viel: "wc" sagt mir, dass es 4037 Bytes in meinem Text gibt. Etwa 6000 oder so klingt wie eine bequeme Obergrenze für meine Bedürfnisse.

Gibt es eine einfache Möglichkeit, die Anzahl der Bytes Text erhöhen, die ich in diesem Feld erlaubt bin?

+2

Just an FYI als ein Tridion Entwickler zu einem anderen. Die Verwendung der Broker-Datenbank (oder einer anderen Datenbank in diesem Fall) für Textsuchen, insbesondere die offenen% text% -Suchen, wird wirklich nicht empfohlen.Dies wird Ihnen sicherlich große Leistungsprobleme bringen. –

+0

@Hendrik: Ja, ich bin mir bewusst, dass es jede Zeile scannt und nicht den Index für diesen Teil der Abfrage trifft: im Benchmarking war es bisher kein Problem (deutlich unter 100 Millis) - wir sind wirklich nur wie 20 Reihen hier reden. Ich stimme zu, dass es sicherlich nicht ideal ist. – George

Antwort

10

Es gibt keine unterstützte Vorgehensweise, um das zu erreichen, was Sie erreichen möchten. Denken Sie auch daran, was der eigentliche Zweck des benutzerdefinierten Meta ist. Es scheint mir, dass Sie es missbrauchen, indem Sie großen Inhalt in die Spalte einfügen.

Wie auch immer, wenn Sie wirklich diesen Weg gehen wollen, dann müssen Sie den Tridion Support kontaktieren oder sdltridionworld (Login erforderlich) besuchen und CD_2011.1.1.83467 (oder einen Hotfix mit CD_2011.1.1.81125 mit Ausnahme von CD_2011 herunterladen .1.1.83475 !!!). Was der Hotfix ändert, ist, dass er eine harte Überprüfung der Größe der Metadaten entfernt, die zum Zeitpunkt der Bereitstellung fertig gestellt wurden. Mit anderen Worten, Sie können sich selbst ins Bein schießen, indem Sie den Datenbankserver entscheiden lassen, ob Sie in dieser Spalte so viel Inhalt speichern dürfen. Bitte beachten Sie, dass das Ändern der Datenbankspalten nicht unterstützt von Tridion ist.

Hoffe, das hilft.

+0

Danke für die Antwort: Wir prüfen, ob der Hotfix das Problem behebt und wie wir die Suche nach den fraglichen Komponenten durchführen. Wir können wahrscheinlich nicht umschreiben, wie diese Suche kurzfristig funktioniert (wie gesagt, es funktioniert und es ist mehr als schnell genug), aber wahrscheinlich in der nächsten Version. – George

5

Ändern der Definition der Spalte in der Broker-Datenbank ist nicht unterstützt, und kann in Zukunft Unterstützung und Upgrade-Probleme für Ihre Implementierung verursachen.

Es klingt wie Sie nehmen den Textinhalt Ihrer Komponenten und platzieren es in einem textbasierten Metadatenfeld, um eine Art Volltextsuchfunktionalität an Ihrem Frontend bereitzustellen (Verzeihen Sie, wenn ich bin falsch). Dies entspricht nicht unbedingt dem beabsichtigten Zweck der Content Delivery-API.

verweise ich Sie auf einem früheren question zum Thema Freitextsuche Implementierung und meine answer

Verwandte Themen