2013-02-27 163 views
1

如果我在彈性搜索中有一個child-parent映射。 我會如何根據孩子的統計數據尋找父母。在elasticsearch中搜索child-parent

例子:

{ 
    'parent':{ 
    '_id':{ 
     'path':'parent_id' 
    }, 
    'properties':{ 
     'parent_id':{ 
     'type':'string' 
     }, 
     'name':{ 
     'type':'string' 
     }, 
     'job':{ 
     'type':'string' 
     }, 
     'age':{ 
     'type':'integer' 
     }, 

    } 
    } 
}{ 
    'child':{ 
    '_parent':{ 
     'type':'parent' 
    }, 
    '_id':{ 
     'path':'child_id' 
    }, 
    'properties':{ 
     'child_id':{ 
     'type':'string' 
     }, 
     'name':{ 
     'type':'string' 
     }, 
     'favorite_toy':{ 
     'type':'string' 
     }, 
     'age':{ 
     'type':'integer' 
     }, 

    } 
    } 
} 

我怎麼會:

  1. 得到所有有孩子名爲 '鮑勃' 的父母?
  2. 指望有一個名爲'bob'的孩子的所有父母?
  3. 讓所有的父母有兩個以上的孩子?
  4. 得到所有有2個5歲以上孩子的父母嗎?

回答

3

1)和2) - 你可以簡單地包裹查詢到has_child查詢:

{ 
    "has_child":{ 
    "type":"child", 
    "query":{ 
     "match":{ 
     "name":"bob" 
     } 
    } 
    } 
} 

3),4) - 我不認爲這是可能的時刻。

+0

非常感謝,當我索引孩子時,我想我只需要更新父母的特定字段,比如「孩子數量」。 – eran 2013-02-28 07:49:07

+0

@imotov嗨伊戈爾,我感興趣的是#3的原始問題,我想知道這是否從您的帖子時間實施。請讓我知道 – 2014-01-14 00:49:13

+0

@ user1631616它沒有實現,但是如果你不關心相關性,你可以使用[constant_score]來僞造它(http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query -dsl-constant-score-query.html)對孩子的查詢(所以所有的孩子都會返回分數,使用'sum' [score_type](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query -dsl-has-child-query.html#_scoring_capabilities)並設置[min_score](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-min-score.html) to 2 – imotov 2014-01-14 02:06:15