Known issues in Experience Optimization

This section describes the known issues in Experience Optimization.

Promotions cannot find Components that are published before indexing

Problem: If you publish Components before creating your OpenSearch indexes, Promotions will not be able to find these Components, even if you republish the Components.

Even if you then run the scripts to create indexes and republish the Components, they will still not be found if a Promotion is triggered, and you will see the following in the log on the server:
18-11-14 08:56:02,508 DEBUG [http-nio2-8094-exec-9] OpenSearchXoQueryProvider - Listing documents on xo-contentfragments/contentfragments via content-fragment
2018-11-14 08:56:02,512 DEBUG [http-nio2-8094-exec-9] OpenSearchXoQueryProvider - Query matched 8 item(s) in the system.
2018-11-14 08:56:02,512 DEBUG [http-nio2-8094-exec-9] DefaultResultHandler - Setting context Publication to 11
2018-11-14 08:56:02,512 DEBUG [http-nio2-8094-exec-9] DefaultResultHandler - Filtering out Promotion 'My Promotion', as it does not contain any items.

Workaround: You must start over with a fresh index and then publish again. Wipe existing OpenSearch indexes, run the scripts to recreate the indexes, and publish the Components.

The matches operator in a trigger only supports a pipe character '|' for regular expressions

Problem: If your trigger uses a matches operator with a regular expression, such a regular expression can no longer be parsed if it contains any other special character than the pipe character '|'.

Workaround: You may be able to approximate your original regular expression by writing its possible values in a pipe-separated list. For example, the string "container|contained" matches either "container" or "contained".

A text-type trigger will be stored as a number if it can be interpreted as such

Problem: If your trigger is of type text, but contains a string that can be seen as an integer or float, it will be stored as such. This is true even if the string is part of a pipe-separated list of strings, and even if one or more of the other strings in the list are textual strings. For example, a text trigger with the value "foo|bar|42|3.14" will be seen as two strings, an integer and a float.

Workaround: By adding a leading zero to any number-type string, you can force it to be saved as a string. So, following the example above, a text trigger with the value "foo|bar|042|03.14" will be seen as four strings.

Error when OpenSearch query results contain more than 10,000 items

Problem: If you perform a query against OpenSearch and the results exceed 10,000 total promotions or content fragments (items), Experience Optimization produces an error.

Workaround: Such large results are not expected under normal Experience Optimization usage, since more than 10,000 items on a webpage is not typically desired. If you need to display more than 10,000 results, increase the value of the index.max_result_window index setting in the OpenSearch configuration on the server from the default 10,000 items. For details, refer to the OpenSearch documentation.
Localizing Schema field descriptions in a child Publication changes the Attribute display name

Problem: When you do content filtering in a Promotion, and when you examine Attributes based on Tridion Sites Schema fields in OpenSearch, the Attribute display name shows the Schema field description as it is in the specific Publication from which you published the Component last. Typically, this is not a problem, as Schema field descriptions are inherited unchanged down the BluePrint hierarchy. But if someone localizes the Schema field description in a child Publication, the Attribute display name shows the localized Schema field description or the original one, depending on which Publication you last published from.

Cannot use tcdl:Link in combination with Experience Optimization placeholders
Problem: You cannot use the tcdl:Link tag in combination with Experience Optimization placeholders because the Content Delivery TCDL handler tries to validate these URIs when publishing and throws exceptions when it encounters invalid URIs. For example, the following code will fail to publish:
<tcdl:itemContent maxItems="10" var="searchResult">
			 <tcdl:itemContentTemplate> 
       <p><tcdl:Link type='Component' origin='@@Page.Id@@' 
           destination='##componentUri##' templateURI='tcm:0-0-0'
			        linkText='Read more...' 
           textOnFail='false' linkAttributes='' />
       </p>
</tcdl:itemContentTemplate> </tcdl:itemContent>

Solution: To solve this problem, use the tridion:ComponentLink or tcdl:ComponentPresentation tags because these URIs are validated at runtime.