The JavaScript Query stage allows you to write custom processing logic using JavaScript to manipulate search requests and responses. The first time that the pipeline is run, Fusion compiles the JavaScript program into Java bytecode using the JDK’s JavaScript engine. The JavaScript Query stage allows you to run JavaScript functions over search requests and responses by manipulating variables called “request” and “response” which are Request objects and Response objects, respectively.
CautionUsers who can create or modify code obtain access to the broader Fusion environment. This access can be used to create intentional or unintentional damage to Fusion.

The JavaScript Engine Used by Fusion

The default JavaScript engine used by Fusion is the Nashorn engine from Oracle. See The Nashorn Java API for details. In Fusion 5.9.6 and up, you also have the option to select OpenJDK Nashorn. While Nashorn is the default option, it is in the process of being deprecated and will eventually be removed, so it is recommended to use OpenJDK Nashorn when possible. You can select the JavaScript engine in the pipeline views or in the workbenches. Your JavaScript pipeline stages are interpreted by the selected engine. JavaScript engine selector

JavaScript Query Stage Global Variables

JavaScript is a lightweight scripting language. In a JavaScript stage, Fusion uses the Nashorn engine, which implements ECMAScript version 5.1. Although Nashorn does include some ECMAScript 6 (ES6) features such as let, const, or template strings, Fusion does not enable ES6 by default, so ES6 support is not guaranteed. What a JavaScript program can do depends on the container in which it runs. For a JavaScript Query stage, the container is a Fusion query pipeline.

Global pipeline variables

See Custom JavaScript Query Stage Examples for more information.

Syntax Variants

JavaScript stages can be written using function syntax. With function syntax, global variables are passed as function parameters.
Support for legacy syntax was removed in Fusion 5.8.

Function Syntax

function(request,response) {
   request.addParam("foo", "bar");
}
ImportantFunction syntax is used for the examples in this document.

Global variable logger

The logs are output to the query service logs for custom query stages. Access the Log Viewer and filter on this service to view the information.

See also

LucidAcademyLucidworks offers free training to help you get started.The Course for JavaScript in Fusion focuses on how to leverage JavaScript in Fusion to build powerful and responsive scripts at index and query time:
JavaScript in FusionPlay Button
Visit the LucidAcademy to see the full training catalog.