В настоящее время в 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.0 groovy
прекратилась, и кажется, что единственное оставшееся решение - это механизм сценариев, а из-за отсутствия должного понимания классов 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?**
}
Реализация для этого класса или какой-либо другой способ достижения требуемого результата будет очень полезной.