5

目前,在 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?**

}

实现此类或以其他方式实现所需输出将有很大帮助。

4

0 回答 0