2013-02-27 87 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