我想基于两个脚本过滤器构建一个查询,但我似乎无法让它工作。我已经尝试过使用嵌套(遵循文档中的示例),但不断收到语法错误:
QueryParsingException[[my_index] [_na] filter malformed, no field after start_object
查询是:
{
"query": {
"filtered": {
"query":{
"query_string": {
"query": "things.type:1 AND things.status:1"
}
},
"filter": {
"nested": {
"path": "obj",
"_cache": true,
"filter": {
"bool": {
"must": [
{
"script": "doc['things.type'].values.size() == 1"
},
{
"script": "obj['other_things.key'].values.size() >= 1"
}
]
}
}
}
}
}
}
}
我可以从第一个脚本("script": "doc['things.type'].values.size() == 1"
)中提取记录并在Python中迭代列表(唱pyelasticsearch
来执行这些查询),但似乎弹性搜索应该能够这样做。
答案 0 :(得分:1)
您有两个嵌套对象,因此需要两个独立的嵌套过滤器。每个嵌套过滤器都适用于单个文档,因此您无法在一个嵌套子句中访问不同的文档。您可以根据需要使用尽可能多的过滤器,并与:
连接{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "things.type:1 AND things.status:1"
}
},
"filter": {
"and": {
"filters": [
{
"nested": {
"path": "other_things",
"filter": {
"script": {
"script": "doc['other_things.key'].values.size() >= 1"
}
}
}
},
{
"nested": {
"path": "things",
"filter": {
"script": {
"script": "doc['things.type'].values.size() == 1"
}
}
}
}
]
}
}
}
}
}