gpt4 book ai didi

elasticsearch - 使用表达式的脚本字段 - 只能访问成员变量 [value] 或成员方法

转载 作者:行者123 更新时间:2023-11-29 02:50:26 24 4
gpt4 key购买 nike

我正在尝试在我的查询中使用脚本字段。我启用了沙盒脚本,并尝试使用表达式来计算新字段。

问题是我收到以下错误:

{
"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 上遇到了这个文档

There are a few limitations relative to other script languages:

  • Only numeric fields may be accessed
  • Stored fields are not available
  • If a field is sparse (only some documents contain a value), documents missing the field will have a value of 0

我的字段是字符串类型,这可能是问题所在?如果是,有没有其他方法可以使用基于字符串字段的脚本字段?也许使用 groovy?

最佳答案

我认为问题在于该字段是一个嵌套对象,如果我正确阅读了文档,那么 doc['field'] 仅支持简单的术语字段。

Note, however, that the doc[...] notation only allows for simple valued fields (can’t return a json object from it) and makes sense only on non-analyzed or single term based fields.

但是使用 _source 对我有用

   "script_fields" : {
"field1" : {
"script" : "_source.about.hobbies.size() > 0"
}
},

关于elasticsearch - 使用表达式的脚本字段 - 只能访问成员变量 [value] 或成员方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36303448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com