Inner hitsだとどうでしょうか?
https://www.elastic.co/guide/en/elasticsearch/reference/5.4/search-request-inner-hits.html
手元の環境 elasticsearch/kibana 5.4.1で以下のように試したところ、親の内容も結果に含んでいました。
以下、こちらで再現した手順と内容です。
親・子関係を持つ定義を作成
PUT forum0707
{
"mappings": {
"blog": {
"properties": {
"blog_id": {
"type": "long"
},
"category": {
"type": "keyword"
}
}
},
"articles": {
"_parent": {
"type": "blog"
},
"properties": {
"articles_id": {
"type": "long"
},
"subject": {
"type": "keyword"
},
"body": {
"type": "text"
}
}
}
}
}
テストデータの作成
POST forum0707/blog/1
{
"blog_id": 1,
"category": "政治"
}
POST forum0707/blog/2
{
"blog_id": 2,
"category": "エンタメ"
}
POST forum0707/articles/1?parent=1
{
"articles_id": 1,
"subject": "東京都議会選挙のはなし",
"body": "7月にありました。 test"
}
POST forum0707/articles/2?parent=1
{
"articles_id": 2,
"subject": "Hello World",
"body": "Hello World。 hoge"
}
POST forum0707/articles/3?parent=1
{
"articles_id": 3,
"subject": "こんにちわせかい",
"body": "はじめまして。 test"
}
POST forum0707/articles/3?parent=2
{
"articles_id": 4,
"subject": "たまには",
"body": "娯楽の記事でも。 test"
}
検索
親にblogを持ち、bodyに「test」を含むarticlesを探す。Inner Hitでblogの内容も出す。
GET forum0707/articles/_search
{
"query": {
"bool": {
"must": [
{
"has_parent": {
"parent_type": "blog",
"query": {
"match_all": {}
},
"inner_hits" : {}
}
},
{
"match_phrase": {
"body": "test"
}
}
]
}
}
}
結果(一部抜粋)
blog:1の政治カテゴリが取得できていることが確認できました。
{
"took": 27,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1.4475205,
"hits": [
{
"_index": "forum0707",
"_type": "articles",
"_id": "3",
"_score": 1.4475205,
"_routing": "1",
"_parent": "1",
"_source": {
"articles_id": 3,
"subject": "こんにちわせかい",
"body": "はじめまして。 test"
},
"inner_hits": {
"blog": {
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_type": "blog",
"_id": "1",
"_score": 1,
"_source": {
"blog_id": 1,
"category": "政治"
}
}
]
}
}
}
},