{ "error": { "root_cause": [ { "type": "illegal_argument_exception", "reason": "[script] unknown field [source], parser not found" } ], "type": "illegal_argument_exception", "reason": "[script] unknown field [source], parser not found" }, "status": 400 }
时间: 2023-07-03 08:30:47 浏览: 498
抱歉,我之前的回答有误,是因为在 Elasticsearch 7.0 之后,禁用了 inline scripts。因此,需要将脚本放在 Elasticsearch 中的 script file 中,然后使用 script_id 来引用它。
具体步骤如下:
1. 创建一个 script file,例如 `my_script.painless`,并将以下脚本内容复制到文件中:
```
doc['field1'].value - doc['field2'].value > 10
```
2. 将该脚本上传到 Elasticsearch 中:
```
PUT _scripts/my_script
{
"script": {
"lang": "painless",
"source": "doc['field1'].value - doc['field2'].value > 10"
}
}
```
3. 使用 script_id 来引用该脚本,并使用聚合函数来计算符合条件的文档数量:
```
{
"query": {
"bool": {
"filter": {
"script": {
"script": {
"id": "my_script"
}
}
}
}
},
"aggs": {
"count": {
"value_count": {
"field": "_id"
}
}
}
}
```
其中,script 中的 id 表示引用的脚本文件的名称,aggs 中的 count 表示对符合条件的文档进行计数,并将结果放到 count 字段中。
注意:在使用 script 查询时需要开启 dynamic scripting,或者在 Elasticsearch.yml 文件中设置 script.painless.regex.enabled: true。
阅读全文