SunnyMarkLiu
SunnyMarkLiu

Reputation: 93

ElasticSearch [script] unknown field [file], parser not found

I used script_score to customize the scoring:

GET /customer/_search
{
    "query": {
        "function_score": {
            "query": {
                "match": {
                    "name": "Mark"
                }
            },
            "script_score": {
              "script": {
                "lang": "painless",
                "file": "test"
              }
            }
        }
    }
}

I set "file": "test", and put test.groovy file in config/scripts directory, but I got these error:

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "[script] unknown field [file], parser not found"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "[script] unknown field [file], parser not found"
  },
  "status": 400
}

[script] unknown field [file], parser not found! Why? Should I need to install some plugins?

Elasticsearch version : 6.2.3

Plugins installed: None

JVM version : 1.8.0_181

OS version: Ubuntu Linux 4.4.0-124-generic

Upvotes: 1

Views: 12846

Answers (1)

Val
Val

Reputation: 217554

File scripts have been removed in ES 6.0, you should now use stored scripts instead.

You can easily migrate your Groovy script to Painless.

First, store your script:

POST _scripts/test
{
  "script": {
    "lang": "painless",
    "source": "Math.log(_score * 2)"
  }
}

Then use it in your query:

GET /customer/_search
{
    "query": {
        "function_score": {
            "query": {
                "match": {
                    "name": "Mark"
                }
            },
            "script_score": {
              "script": {
                "id": "test"
              }
            }
        }
    }
}

Upvotes: 2

Related Questions