Search Scripted Post-processors form

  • Release version: Zurich
  • Updated July 31, 2025
  • 2 minutes to read
  • Summarize
    Summarized using AI
    This content was generated using new OpenAI-powered functionality. Results are provided on an as is basis and are not guaranteed to be accurate or complete.

    Summary of Search Scripted Post-processors form

    The Search Scripted Post-processors form in ServiceNow enables administrators to create and manage scripted post-processors within AI Search application configurations. These post-processors are server-side scripts that modify search results dynamically after the initial query, allowing customization of how results are displayed or processed.

    Show full answer Show less

    Key Features

    • Activation Control: You can activate or deactivate each scripted post-processor as needed.
    • Application Scope: The form automatically sets the application scope for the post-processor to maintain proper configuration context.
    • Type Selection: Specify whether the script operates on Genius Result answer records or standard search result records, enabling tailored processing depending on the search data type.
    • Post-processing Script Function: Write server-side JavaScript functions that take a record as input and modify its fields. For example, transforming date fields into human-friendly relative time formats (e.g., "2 hours ago") to enhance search result readability.
    • API Support: The UI provides an overview of available API methods for use within the script, facilitating script development and ensuring consistency.
    • Reference to Existing Scripts: Existing post-processor scripts can be accessed and used as templates by navigating to the Search Scripted Post-processors [syssearchscriptedprocessor] table in list view, helping customers quickly start or adapt their own scripts.

    Practical Use and Benefits

    This capability allows ServiceNow customers to enhance AI Search results by applying custom logic after the initial search query execution. For instance, converting system dates into a more user-friendly format improves the end-user experience without altering the underlying data. By leveraging scripted post-processors, customers gain greater control over how search data is presented, ensuring results are more relevant, readable, and aligned with business needs.

    The Search Scripted Post-processors form enables you to create a search scripted post-processor in the search application configuration for an AI Search application.

    For details on creating or editing search scripted post-processors, see Using search scripted post-processors in AI Search application configurations.

    Table 1. Search Scripted Post-processors form
    Field Description
    Active Option to activate the search script post-processor.
    Name Name for the search script post-processor.
    Application Application scope for the search script post-processor. This field is automatically set.
    Type Type of record the search script post-processor operates on.
    Valid values:
    • Genius Result: Script operates on a Genius Result answer record.
    • Search Result: Script operates on a search result record.
    Post processing script Server-side script function that takes a record object as its parameter. When the search scripted post-processor is linked to a search application configuration, search results reflect changes made to the record object in this script function.
    As an example, this post-processing script function operates on search results from the kb_knowledge table, transforming sys_updated_on date field values into a human-readable format:
    function process(record) {
    
        var transformableTables = ['kb_knowledge'];
        var transformableDateFields = ['sys_updated_on'];
    
        var table = record.getTable();
    
        // Terminate early if possible, to avoid unnecessary overhead
        if (transformableTables.indexOf(table) === -1)
            return;
    
        function transformToHumanFriendlyDate(rawDate) {
            // Time gaps in ms
            var MINUTE_GAP = 60000;
            var HOUR_GAP = 3600000;
            var DAY_GAP = 86400000;
            var WEEK_GAP = 604800000;
            var MONTH_GAP = 2592000000;
            var YEAR_GAP = 31536000000;
    
            var gap = new Date().getTime() - rawDate;
            if (gap < MINUTE_GAP) {
                return gs.getMessage('Just Now');
            } else if (gap > MINUTE_GAP && gap < 2 * MINUTE_GAP) {
                return gs.getMessage('1 minute ago');
            } else if (gap < HOUR_GAP) {
                return gs.getMessage('{0} minutes ago', '' + Math.floor(gap / MINUTE_GAP));
            } else if (gap > HOUR_GAP && gap < 2 * HOUR_GAP) {
                return gs.getMessage('1 hour ago');
            } else if (gap < DAY_GAP) {
                return gs.getMessage('{0} hours ago', '' + Math.floor(gap / HOUR_GAP));
            } else if (gap > DAY_GAP && gap < 2 * DAY_GAP) {
                return gs.getMessage('1 day ago');
            } else if (gap < WEEK_GAP) {
                return gs.getMessage('{0} days ago', '' + Math.floor(gap / DAY_GAP));
            } else if (gap > WEEK_GAP && gap < 2 * WEEK_GAP) {
                return gs.getMessage('1 week ago');
            } else if (gap < MONTH_GAP) {
                return gs.getMessage('{0} weeks ago', '' + Math.floor(gap / WEEK_GAP));
            } else if (gap > MONTH_GAP && gap < 2 * MONTH_GAP) {
                return gs.getMessage('1 month ago');
            } else if (gap < YEAR_GAP) {
                return gs.getMessage('{0} months ago', '' + Math.floor(gap / MONTH_GAP));
            } else if (gap > YEAR_GAP && gap < 2 * YEAR_GAP) {
                return gs.getMessage('1 year ago');
            } else {
                return gs.getMessage('{0} years ago', '' + Math.floor(gap / YEAR_GAP));
            }
        }
    
        for (var i = 0; i < transformableDateFields.length; i++) {
            var fieldName = transformableDateFields[i];
            var updatedDateField = record.getField(fieldName);
            if (updatedDateField !== null) {
                var updatedDateRaw = updatedDateField.getValue();
                if (updatedDateRaw != null) {
                    var humanFriendlyDate = transformToHumanFriendlyDate(updatedDateRaw);
                    updatedDateField.setDisplayValue(humanFriendlyDate);
                }
            }
        }
    }
    Note:
    The UI displays an overview of API methods usable in the post-processing script function.
    You can copy code from an existing post-processor script to use as a starting point for your own script function. To access existing post-processor scripts, open the Search Scripted Post-processors [sys_search_scripted_processor] table in list view by following these steps:
    1. Select All.
    2. In the Filter field, enter sys_search_scripted_processor.list.
    3. Press Enter.