Exemple #1
0
def count_fulltext(search_terms, actif = True, bloque = False):
    """
    Compter les anciens trouvés par la recherche fulltext

    :param str search_terms:    Termes utilisés pour la recherche


    :param bool actif:          True (default)  =   Chercher uniquement les actifs
                                False           =   Chercher uniquement les inactifs
                                None            =   Chercher TOUS les anciens

    :param bool bloque:         True            =   Chercher uniquement les bloqués
                                False (default) =   Chercher uniquement les autres
                                None            =   Chercher tous les anciens

    :return int:                le nombre d'anciens qui satisfont les termes de recherche
    """
    sel = select([func.count(__ancien.c.id_ancien.distinct())]).where("fulltext @@ to_tsquery('french', :input_str)")
    sel = sel.where(__ancien.c.nouveau == False)


    if actif is not None:
        sel = sel.where(__ancien.c.actif == actif)

    if bloque is not None:
        sel = sel.where(__ancien.c.bloque == bloque)


    res = engine.execute(sel, input_str=helper.prepare_for_fulltext(search_terms)).first()[0]
    return res
Exemple #2
0
def fulltext_search(search_terms, offset = 0, limit =0, actif = True, bloque = False):
    """
    Recherche un ancien dans l'annuaire par fulltext search

    :param str search_terms:    Termes utilisés pour la recherche
    :param int offset:          démarrer la requête au  rang X
    :param int limit:           prendre Y résultats

    :param bool actif:          True (default)  =   Chercher uniquement les actifs
                                False           =   Chercher uniquement les inactifs
                                None            =   Chercher TOUS les anciens

    :param bool bloque:         True            =   Chercher uniquement les bloqués
                                False (default) =   Chercher uniquement les autres
                                None            =   Chercher tous les anciens
    :return:
    """
    aaa = __asso_ancien_adresse

    from_obj = __ancien
    from_obj = from_obj.outerjoin(
    aaa, and_(__ancien.c.id_ancien == aaa.c.id_ancien, aaa.c.actif == True)
    ).outerjoin(
        __adresse, aaa.c.id_adresse == __adresse.c.id_adresse
    ).outerjoin(
        __ville, __adresse.c.id_ville == __ville.c.id_ville
    ).outerjoin(
        __pays, __ville.c.id_pays == __pays.c.id_pays
    ).outerjoin(
        __experience, and_(__ancien.c.id_ancien == __experience.c.id_ancien)
    ).outerjoin(
        __entreprise, __experience.c.id_entreprise == __entreprise.c.id_entreprise
    )

    sel = select(
    [
        __ancien.c.id_ancien.label('id'),
        __ancien.c.prenom.label('prenom'),
        __ancien.c.nom.label('nom'),
        __ancien.c.ecole.label('ecole'),
        __ancien.c.promo.label('promo'),
        __ancien.c.fulltext.label('fulltext'),
        __ville.c.nom.label('ville'),
        __adresse.c.code.label('code_postal'),
        __entreprise.c.nom.label('entreprise'),
        __pays.c.nom.label('pays')
    ],
        from_obj=from_obj,
        use_labels=True
    ).order_by(
        __ancien.c.ecole,
        __ancien.c.promo,
        __ancien.c.nom,
        __ancien.c.prenom,
        desc(__experience.c.actif),
        desc(__experience.c.debut).nullslast()
    )
    sel = sel.where("fulltext @@ to_tsquery('french', :input_str)")
    sel = sel.where(__ancien.c.nouveau == False)

    if actif is not None:
        sel = sel.where(__ancien.c.actif == actif)

    if bloque is not None:
        sel = sel.where(__ancien.c.bloque == bloque)

    sel = sel.distinct(
        __ancien.c.ecole,
        __ancien.c.promo,
        __ancien.c.nom,
        __ancien.c.prenom
    )

    new_sel = sel.alias().select().order_by(
        "ts_rank_cd(fulltext, to_tsquery('french', :input_str)) DESC"
    )

    new_sel = new_sel.offset(offset).limit(limit)

    res = engine.execute(new_sel, input_str=helper.prepare_for_fulltext(search_terms)).fetchall()
    return res