我正在尝试在查询中使用脚本字段。 我启用了沙盒脚本,并尝试使用表达式来计算新字段。
问题是我收到以下错误:
{
"type": "expression_script_compilation_exception",
"reason": "Only the member variable [value] or member methods may be accessed on a field when not accessing the field directly"
}
似乎只有"价值"可以访问。我在这里错过了什么?
运行以下查询时:
{
"query": {
"match_all": {}
},
"script_fields" : {
"field1" : {
"script" : {
"lang": "expression",
"inline": "doc['about.hobbies'].empty"
}
}
}
}
映射:
{
"my_index": {
"mappings": {
"type": {
"properties": {
"about": {
"properties": {
"hobbies": {
"type": "string",
"analyzer": "lowercase"
}
}
}
}
}
}
}
小解释:我有一个字段,可以包含字符串值列表。
"hobbies": ["a","b",c"]
它也可以是空的。我希望有一个类型为boolean的脚本字段,当列表不为空时,其值为true;如果列表为空,则为false。
更新:阅读更多内容,我在lucene expressions scripts
上遇到此文档相对于其他脚本语言存在一些限制:
- 只能访问数字字段
- 存储的字段不可用
- 如果某个字段是稀疏的(只有部分文档包含值),则缺少该字段的文档的值为0
我的字段是String类型,可能是问题? 如果是,是否有其他方法可以使用基于字符串字段的脚本字段?也许使用groovy?
答案 0 :(得分:1)
我认为问题是该字段是嵌套对象,如果我正确阅读文档,则doc ['field']仅支持简单的术语字段。
但请注意,doc [...]符号只允许使用简单的值字段(不能从中返回json对象),并且仅在非分析或基于单个术语的字段中有意义。
但是使用_source对我有用
"script_fields" : {
"field1" : {
"script" : "_source.about.hobbies.size() > 0"
}
},