在ElasticSearch索引中,如何得到数组字段长度大于0的文档?
我试着遵循多种语法,但没有任何突破。我在所有的语法中都犯了同样的错误。
获取http://{host}}:{{elasticsearchport}}/student\u details/\u search
语法1:
{
"query": {
"bool": {
"filter": {
"script": {
"script": {
"source": "doc['enrolledCourses'].values.length > 0",
"lang": "painless"
}
}
}
}
}
}
错误:
"caused_by": {
"type": "illegal_argument_exception",
"reason": "No field found for [enrolledCourses] in mapping with types []"
}
语法2:
{
"query": {
"bool": {
"filter": {
"script": {
"script": {
"source": "doc['enrolledCourses'].values.size() > 0",
"lang": "painless"
}
}
}
}
}
}
错误:
"caused_by": {
"type": "illegal_argument_exception",
"reason": "No field found for [enrolledCourses] in mapping with types []"
}
语法3:
{
"query": {
"bool": {
"filter" : {
"script" : {
"script" : "doc['enrolledCourses'].values.size() > 0"
}
}
}
}
}
错误:
"caused_by": {
"type": "illegal_argument_exception",
"reason": "No field found for [enrolledCourses] in mapping with types []"
}
语法4:
{
"query": {
"bool": {
"filter" : {
"script" : {
"script" : "doc['enrolledCourses'].values.length > 0"
}
}
}
}
}
错误:
"caused_by": {
"type": "illegal_argument_exception",
"reason": "No field found for [enrolledCourses] in mapping with types []"
}
请帮我解决这个问题。
1条答案
按热度按时间1mrurvl11#
我不知道你运行的是哪个版本的elastic,那么我所有的测试都是在最新的7.9.0版本的elasticsearch上运行的。
我将使用无痛脚本脚本。
我把文件放到索引测试中:
如何查看一个文档包含
enrolledCourses
第二个不是。在painless中,您不需要使用值字段,您可以直接获取长度,这是根据painless文档确定的。那我就不用了
values
脚本中的运算符:运行之后,我收到了两个不同的错误:
这两个错误都很明显。第一个是字段不存在的文档,第二个是elasticsearch索引字符串数组字段作为默认Map类型
text
.这两种情况都很容易通过Map修复
enrolledCourses
字段组件keyword
. 在第一种情况下,Map将始终提供空字段,在第二个关键字word中,Map将允许运行fielddata属性。现在我将得到正确的答案: