2017-02-07 10 views
0

子タイプの検索から親のフィールドを取得する:ElasticSearch:私はこのような2種類(親/子関係)とインデックスを持って

{ 
"myindex": { 
    "mappings": { 
     "b": { 
      "_parent": { 
       "type": "a" 
      }, 
      "properties": {     
       "b_propertie1": { 
        "type": "string", 
        "analyzer": "keyword_analyzer" 
       }, 
       "b_propertie2": { 
        "type": "string", 
        "analyzer": "keyword_analyzer" 
       } 
      } 
     }, 
     "a": { 
      "properties": { 
       "a_propertie1": { 
        "type": "string", 
        "analyzer": "keyword_analyzer" 
       }, 
       "a_propertie2": { 
        "type": "string", 
        "analyzer": "keyword_analyzer" 
       } 
      } 
     } 
    } 
} 
} 

と私はのフィールドを返すクエリを作成したいです親と子供

POST /myindex/b/_search 
{ 
    "fields" : ["b_propertie1", "b_propertie2", "a_propertie1", "a_propertie2"], 
    "query": { 
     "match": { 
      "b_propertie1": "SOMETHING" 
     } 
    } 
} 

これを行う方法はありますか?そしてどうやって?

ありがとうございます。

答えて

1

ElasticSearchは、親ドキュメントと子ドキュメントのフィールドをマージすることはできません。

has_childクエリを使用すると、クエリに一致するchild個のドキュメントを持つparentドキュメントが返されます。 inner_hitsパラメータを指定することで、照会に一致する文書も内部オブジェクトとしてchildとなります。

"query": { 
    "has_child": { 
     "type": b, 
     "query": { 
      "match": { 
       "b_propertie1": "SOMETHING" 
      } 
     }, 
     "inner_hits": { 
      '_source': { 
       'includes': ['b_propertie1', 'b_propertie2'] 
      } 
     } 
    } 
} 

は、その後、あなたのアプリで、あなたが望む結果を得るためにparentchild文書からフィールドをマージすることができます。

私はそれが役に立ちそうです。 :)

+0

素晴らしい、それは働く:)ありがとう –

関連する問題