Enabling click tracking on URLs other than the indexed live url
Managed by | Updated .
Background
Funnelback's click tracking feature includes in-built security that prevents redirection to an arbitrary URL. Click tracking, while not required, enables Funnelback to learn from user behaviour and modify result ranking. Click tracking is also used for the top click reports within the analytics.
There are some valid situations where you wish to redirect to a URL that doesn't match the indexed URL for the document, but still capture the click. This redirect could be to an external URL or a URL that is contained within a metadata field (eg. if the indexer has assigned internal URLs as occurs when indexing database content and some XML data).
This page describes how this redirection can be achieved with click tracking support.
Process
Create a hook_post_datafetch.groovy
hook script that modifies the live URL on the collection that is being queried (have a look to see what the collection parameter is when you run the search). This modification must occur in post datafetch (not post process) because the click tracking link includes an encoded version of the live URL which is calculated after the post datafetch phase completes.
At a basic level all that is required is to update the value of the liveUrl parameter for the item from a post datafetch hook script.
This example sets the live URL to be sourced from a metadata field called customUrl
if ( transaction.response != null
&& transaction.response.resultPacket != null) {
transaction.response.resultPacket.results.each() {
if (it.metaData["customUrl"] != null) {
it.liveUrl = it.metaData["customUrl"]
}
}
}
The transformation can be more complicated - a more advanced example shows the URL being updated to pass in some extra parameters.
import java.net.URLEncoder;
if ( transaction.response != null
&& transaction.response.resultPacket != null) {
transaction.response.resultPacket.results.each() {
def parameter = ''
if ( it.liveUrl.contains("?") ) {
parameter = "&";
} else {
parameter = "?";
}
// In Groovy, "it" represents the item being iterated
it.liveUrl = it.liveUrl + parameter + 'fb_keyword=' + URLEncoder.encode(transaction.question.query);
}
}
- Replace diacritic (accented) characters
- Accessing data model variables that start with a single lower case letter
- Adding numeric metadata constraints via a hook script
- Modifying geo-spatial parameters in the data model (origin, maxdist)
- Storing custom data within the data model
- Writing hook script code for specific search types