Mucking with search summaries in SP2013


For a project I’m working on I needed to add some redaction to the hit highlighting summaries of the search results.   If I see anything that looks like a social security number, then replace the first five digits with asterisks.

At first this looked somewhat daunting because looking in the item templates, all the action on rendering the summary is inside of the ctx.RenderBody method:

<div id="_#= $htmlEncode(itemId) =#_" name="Item" data-displaytemplate="DefaultItem" class="ms-srch-item" onmouseover="_#= ctx.currentItem_ShowHoverPanelCallback =#_" onmouseout="_#= ctx.currentItem_HideHoverPanelCallback =#_">
    _#=ctx.RenderBody(ctx)=#_
    <div id="_#= $htmlEncode(hoverId) =#_" class="ms-srch-hover-outerContainer"></div>
</div>

After a little poking and prodding, it turns out all you need to do is modify the HitHighlightedSummary value before the RenderBody is called.  Add your code after the $setResultItem as follows:

$setResultItem(itemId, ctx.CurrentItem);

// Redaction of Social Security Numbers
var snippet = ctx.CurrentItem['HitHighlightedSummary'];
if (snippet) {
    var re = /(?:<c0>)?[0-9]{3}(?:<\/c0>)?-(?:<c0>)?[0-9]{2}(?:<\/c0>)?-((?:<c0>)?[0-9]{4}(?:<\/c0>)?)/g;
    snippet = snippet.replace(re, '***-**-$1');
    ctx.CurrentItem['HitHighlightedSummary'] = snippet;
}

The regular expression is somewhat complicated because it needs to account for highlighting tags (). Note that you can add to the HitHighlightedSummary yourself and can use the tags if desired.

Comments (1)

  1. Murad says:

    BTW, the ctx.RenderBody(ctx) is inserting the content of the Item_CommonItem_Body.html.

    If you need to customize that, simply copy the contents of Item_CommonItem_Body into your template and replace it with the ctx.RenderBody(ctx).