Using Python in Elasticsearch

Once the plugin has been installed, Python can be used at a scripting language by setting the lang parameter to python.

Scripting is available in many APIs, but we will use an example with the function_score for demonstration purposes:

Inline scripts

Enabling inline scripting on an unprotected Elasticsearch cluster is dangerous. See File scripts for a safer option.

If you have enabled inline scripts, you can use Python as follows:

DELETE test

PUT test/doc/1
{
  "num": 1.0
}

PUT test/doc/2
{
  "num": 2.0
}

GET test/_search
{
  "query": {
    "function_score": {
      "script_score": {
        "script": {
          "inline": "doc[\"num\"].value * factor",
          "lang": "python",
          "params": {
            "factor": 2
          }
        }
      }
    }
  }
}

Indexed scripts

Enabling indexed scripting on an unprotected Elasticsearch cluster is dangerous. See File scripts for a safer option.

If you have enabled indexed scripts, you can use Python as follows:

DELETE test

PUT test/doc/1
{
  "num": 1.0
}

PUT test/doc/2
{
  "num": 2.0
}

POST _scripts/python/my_script  
{
  "script": "doc[\"num\"].value * factor"
}

GET test/_search
{
  "query": {
    "function_score": {
      "script_score": {
        "script": {
          "id": "my_script", 
          "lang": "python",
          "params": {
            "factor": 2
          }
        }
      }
    }
  }
}

We index the script under the id my_script.

The function score query retrieves the script with id my_script.

File scripts

You can save your scripts to a file in the config/scripts/ directory on every node. The .py file suffix identifies the script as containing Python:

First, save this file as config/scripts/my_script.py on every node in the cluster:

doc["num"].value * factor

then use the script as follows:

DELETE test

PUT test/doc/1
{
  "num": 1.0
}

PUT test/doc/2
{
  "num": 2.0
}

GET test/_search
{
  "query": {
    "function_score": {
      "script_score": {
        "script": {
          "file": "my_script", 
          "lang": "python",
          "params": {
            "factor": 2
          }
        }
      }
    }
  }
}

The function score query retrieves the script with filename my_script.py.