目前,在 ES 5.6 上,我们正在使用 groovy 内联脚本来获取给定文档字段中给定术语的 tf,例如 -
GET document/_search
{
"size": 114,
"query": {"terms": {
"doc_id": [1840, 2160]
}},
"script_fields": {
"tf": {
"script": {
"lang": "groovy",
"inline": "_index['text'][term_value].tf()",
"params": {
"term_value": "hello"
}
}
}
}
}
所以它会返回我的响应,例如-
"hits": {
"total": 36,
"max_score": 1,
"hits": [
{
"_index": "document",
"_type": "sample",
"_id": "41707",
"_score": 1,
"fields": {
"tf": [
3
]
}
}]
但是在 ES 6.0groovy
支持下降之后,脚本引擎似乎是唯一剩下的解决方案,并且由于缺乏对 Elasticsearch 类和内部行为的正确理解,很难弄清楚实现。
基于脚本引擎文档,我需要实现
private static class MyExpertScriptEngine implements ScriptEngine {
@Override
public String getType() {
return "string";
}
@Override
public <T> T compile(String scriptName, String scriptSource, ScriptContext<T> context, Map<String, String> params) {}
**What goes here?**
}
实现此类或以其他方式实现所需输出将有很大帮助。