@classmethod
def msearch(cls, body, keys, header=None):
    """Make a multi search.

    body: list of dict query
    keys: list of key I need to set to put the data behind

    """
    conn = cls.get_connection()
    new_body = []
    index_name = None
    assert len(body) == len(keys)
    if not header:
        index_name = cls.get_index_name()
    else:
        assert len(header) == len(body)
        if not index_name:
            index_name = header[0]['index_name']
    for idx, row in enumerate(body):
        if header and header[idx]:
            new_header = {'index': header[idx].get('index_name')}
            new_body.append(new_header)
        else:
            new_body.append({})
        new_body.append(row)
    result = conn.msearch(index=index_name, body=new_body)
    standard_result = {}
    for idx, one_response in enumerate(result['responses']):
        one_key = keys[idx]
        idx_name = index_name
        if header and header[idx]:
            idx_name = header[idx].get('index_name')
        mapped_result, total = cls.render_map(one_response, mindex=True)
        if one_response.get('aggregations'):
            mapped_result['aggs'] = one_response.get('aggregations')
        standard_result.update({one_key: {'total': total, idx_name:
            mapped_result}})
    return standard_result
