我有这样的映射:
{
"post": {
"properties": {
"author_gender": {
"type": "string",
"index": "not_analyzed",
"omit_norms": true,
"index_options": "docs"
},
"author_link": {
"type": "string",
"index": "no"
},
"content": {
"type": "string"
},
"mentions": {
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"profile_image_url": {
"type": "string"
},
"screen_name": {
"type": "string"
}
}
}
}
}
我需要搜索mentions
对象的大小。我试过这个:
{
"filter": {
"script": {
"script": "doc['mentions'].values.length == 2"
}
}
}
这不起作用。给出错误
嵌套:ElasticSearchIllegalArgumentException [找不到任何字段 [提及]用类型[post]]进行映射;
我还尝试用doc['mentions.id'].value.length == 2
替换脚本部分。这也是错误的
nested:ArrayIndexOutOfBoundsException [10];
如何查询mentions
对象大小为2的记录?
答案 0 :(得分:13)
elasticsearch指南建议对对象使用 size() 而不是 length 。所以试试这个:
{
"filter": {
"script": {
"script": "doc['mentions.id'].values.size() == 2"
}
}
}
一切顺利。
答案 1 :(得分:3)
ElasticSearch不会像您想象的那样存储对象数组。而是为每个对象属性存储多个数组。
这就是为什么你必须使用" sub array"代替。