Ryan Ernst c1f1f66509 Scripting: Replace advanced and native scripts with ScriptEngine docs (#24603)
This commit documents how to write a `ScriptEngine` in order to use
expert internal apis, such as using Lucene directly to find index term
statistics. These documents prepare the way to remove both native
scripts and IndexLookup.

The example java code is actually compiled and tested under a new gradle
subproject for example plugins. This change does not yet breakup
jvm-example into the new examples dir, which should be done separately.

relates #19359
relates #19966
2017-05-11 12:15:16 -07:00

58 lines
1.9 KiB
Plaintext

[[modules-scripting-engine]]
=== Advanced scripts using script engines
A `ScriptEngine` is a backend for implementing a scripting language. It may also
be used to write scripts that need to use advanced internals of scripting. For example,
a script that wants to use term frequencies while scoring.
The plugin {plugins}/plugin-authors.html[documentation] has more information on
how to write a plugin so that Elasticsearch will properly load it. To register
the `ScriptEngine`, your plugin should implement the `ScriptPlugin` interface
and override the `getScriptEngine(Settings settings)` method.
The following is an example of a custom `ScriptEngine` which uses the language
name `expert_scripts`. It implements a single script called `pure_df` which
may be used as a search script to override each document's score as
the document frequency of a provided term.
["source","java",subs="attributes,callouts,macros"]
--------------------------------------------------
include-tagged::{docdir}/../../plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java[expert_engine]
--------------------------------------------------
You can execute the script by specifying its `lang` as `expert_scripts`, and the name
of the script as the the script source:
[source,js]
--------------------------------------------------
POST /_search
{
"query": {
"function_score": {
"query": {
"match": {
"body": "foo"
}
},
"functions": [
{
"script_score": {
"script": {
"inline": "pure_df",
"lang" : "expert_scripts",
"params": {
"field": "body",
"term": "foo"
}
}
}
}
]
}
}
}
--------------------------------------------------
// CONSOLE
// TEST[skip:we don't have an expert script plugin installed to test this]