Elasticsearch has_child не возвращает результатов - PullRequest
1 голос
/ 16 июня 2020

Я пытаюсь получить все дочерние элементы родительского документа, но не получаю никакого результата с помощью запроса 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

1 Ответ

1 голос
/ 16 июня 2020

Похоже, вы хотите использовать запрос 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"
        }
      }
    }
  }
}
...