Реализация скриптового движка Elasticsearch для больших запросов - PullRequest
0 голосов
/ 26 июня 2018

В настоящее время в 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?**

}

Реализация для этого класса или какой-либо другой способ достижения требуемого результата будет очень полезной.

...