ElasticSearch没有返回任何结果(_Child) [英] Elasticsearch has_child returning no results

查看:22
本文介绍了ElasticSearch没有返回任何结果(_Child)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试获取父文档的所有子级,但使用HAS_CHILD查询未获得任何结果

{
    "index": "index_x",
    "include_type_name": true,
    "body": {
        "mappings": {
            "agents": {
                "properties": {
                    "id": {
                        "type": "keyword"
                    },
                    "listings": {
                        "type": "join",
                        "eager_global_ordinals": true,
                        "relations": {
                            "agent": "listing"
                        }
                    },
                    "name": {
                        "type": "object"
                    }
                }
            }
        }
    }
}

这是我的问题

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "_id": <id>
                    }
                },
                {
                    "has_child": {
                        "type": "listing",
                        "query": {
                            "match_all": {}
                        },
                        "inner_hits": {}
                    }
                }
            ]
        }
    }
}

但是,当我运行此查询时,我得到的子结果很好

{
    "query": {
        "bool": {
            "must": [
                {
                    "parent_id": {
                        "type":"listing",
                        "id": <id>
                    }
                }
            ]
        }
    }
}
与HAS_PARENT查询相同,不会获得任何结果。 我正在使用ElasticSearch 7.7

推荐答案

听起来您想要使用has_parent查询。以下是它如何在ESv7.7上工作的最小示例:

PUT /so
{
    "mappings": {
        "properties" : {
            "my-join-field" : {
                "type" : "join",
                "relations": {
                    "parent": "child"
                }
            },
            "tag" : {
                "type" : "keyword"
            }
        }
    }
}

POST /so/_doc/1
{
  "my-join-field": "parent",
  "tag": "Adult"
}

POST /so/_doc/2?routing=1
{
  "my-join-field": {
    "name": "child",
    "parent": "1"
  },
  "tag": "Youth"
}

POST /so/_doc/3?routing=1
{
  "my-join-field": {
    "name": "child",
    "parent": "1"
  },
  "tag": "Youth2"
}

GET /so/_search
{
  "query": {
    "has_parent": {
      "parent_type": "parent",
      "query": {
        "match": {
          "tag": "Adult"
        }
      }
    }
  }
}

这篇关于ElasticSearch没有返回任何结果(_Child)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆