我创建了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文档,但此查询不返回任何内容。如果有人可以指出这个查询或映射本身有什么问题,那就太棒了。
答案 0 :(得分:2)
您几乎就在那里,您只需要在nested
查询中移动bool/must
查询:
{
'query': {
'bool': {
'must': [
{
'match_phrase_prefix': {
'title': 'A'
}
},
{
'nested': {
'path': 'groups',
'query': {
'bool': {
'must': [{
'match': {
'groups.value': 'hr'
}
}]
}
}
}
}
]
}
}
}