mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-08 22:14:59 +00:00
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
58 lines
1.9 KiB
Plaintext
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]
|