Elasticsearch过滤父级然后是嵌套对象

时间:2017-06-29 14:27:03

标签: elasticsearch

假设索引数据如下

{
    "name": "John Smith",
    "age": 20,
    "country": "USA",
    "pets": [
        {
            "name": "Lisa",
            "type": "dog"
        },
        {
            "name": "Max",
            "type": "cat"
        }
    ]
},
{
    "name": "Andrea Silva",
    "age": 30,
    "country": "Portugal",
    "pets": [
        {
            "name": "Jack",
            "type": "dog"
        },
        {
            "name": "Ruby",
            "type": "cat"
        }
    ]
},
{
    "name": "Matt Leipzin",
    "age": 22,
    "country": "USA",
    "pets": [
        {
            "name": "Travis",
            "type": "dog"
        },
        {
            "name": "Polaris",
            "type": "cat"
        }
    ]
}

我应该如何获得以下场景的结果:

按名称搜索来自美国且有狗的宠物主人

结果中的pets对象必须只包含狗而不是猫。

我只能通过美国的名字获得所有者,但不知道如何过滤嵌套的pets对象。

{
    'query': {
        'bool': {
            'must': {
                'query_string': {
                    'fields': ['name']
                    'query': <name>
                }
            },
            'filter': {
                'term': {
                    'country': 'USA'
                }
            }
        }
    }
}

提前谢谢!

0 个答案:

没有答案