2013-02-27 3 views
1

Если у меня есть родительское картирование ребенка в упругом поиске. Как я буду искать родителей на основе статистики своих детей.Поиск ребенка-родителя в elasticsearch

Пример:

{ 
    '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. подсчитать всех родителей, у которых есть ребенок по имени «боб»?
  3. получить всех родителей, у которых более двух детей?
  4. получить всех родителей, имеющих 2 детей старше 5 лет?

ответ

3

1) и 2) - вы можете просто обернуть запрос в has_child запрос:

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

3) и 4) - Я не думаю, что это возможно в данный момент.

+0

Спасибо большое, я думаю, мне просто нужно обновить родителей с помощью определенных полей, например «количество детей», когда я проиндексирую потом детей. – eran

+0

@imotov привет Игорь, меня интересует №3 оригинального вопроса, мне было интересно, было ли это реализовано с момента вашего сообщения. Пожалуйста, дайте мне знать –

+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) до 2 – imotov

Смежные вопросы