Elasticsearch查询嵌套对象,不返回任何结果

时间:2016-11-18 10:06:05

标签: python elasticsearch

我创建了Elasticsearch索引,其中一个嵌套字段的映射如下。

"groups": {
    "type": "nested",
    "properties": {
        "name": {
             "type": "text"
        },
        "value": {
             "type": "text"
        }
    }
}

关于ES版本的详细信息,其5.0和我在客户端使用官方python客户端elasticsearch-py。我想根据来查询此嵌套字段。

假设还有另一个名为 name 的字段,它是 text 类型字段。我想找到所有以 A 开头且属于指定群组的名称。

一些示例数据,

群组 - 人力资源(名称=人力资源,价值=人力资源),营销(名称=营销,价值=营销) 名字 - 安德鲁,阿尔法,巴里,约翰

Andrew和Alpha属于HR小组。

基于此,我尝试了一个查询

{
    'query': {
        'bool': {
            'must': [{
                'match_phrase_prefix': {
                    'title': 'A'
                }
            }]
        },
        'nested': {
            'path': 'groups',
            'query': {
                'bool': {
                    'must': [{
                        'match': {
                            'groups.value': 'hr'
                        }
                    }]
                }
            }
        }
    }
}

对于此查询,我引用了ES文档,但此查询不返回任何内容。如果有人可以指出这个查询或映射本身有什么问题,那就太棒了。

1 个答案:

答案 0 :(得分:2)

您几乎就在那里,您只需要在nested查询中移动bool/must查询:

{
    'query': {
        'bool': {
            'must': [
              {
                'match_phrase_prefix': {
                    'title': 'A'
                }
              },
              {
                'nested': {
                   'path': 'groups',
                   'query': {
                     'bool': {
                       'must': [{
                          'match': {
                            'groups.value': 'hr'
                          }
                        }]
                     }
                   }
                }
              }
            ]
        }
    }
}