Exemplo n.º 1
0
def listarPorAtributo(busqueda="",
                      categoria=[],
                      order="",
                      groupDic={},
                      nElementosPagina=20,
                      pagina=1):
    tam = 0
    ix = index.open_dir("whooshLicor/licoresIndex")
    lista = []
    busqueda = busqueda.strip()
    with ix.searcher() as searcher:
        if (not (busqueda) and not (categoria)):
            query = QueryParser("titulo", ix.schema).parse("*")
        elif (not (busqueda) and categoria):
            query = QueryParser(
                "titulo",
                ix.schema).parse("*") & queryCategoryGenerator(categoria)
        elif (busqueda and not (categoria)):
            query = querySearchGenerator(busqueda)
        elif (busqueda and categoria):
            query = querySearchGenerator(busqueda) & queryCategoryGenerator(
                categoria)

        query.normalize()
        if not order:
            order = sorting.ScoreFacet()
        groupMap = agruparLista(groupDic)
        results = searcher.search(query,
                                  groupedby=groupMap,
                                  sortedby=[faceta_enStock(), order],
                                  limit=4000)
        grupo = range(0, searcher.doc_count())
        tam = len(results)
        if (groupMap):
            try:
                if "precio/graduacion" in groupMap.keys():
                    tuplaKey = (groupDic["precio"], groupDic["graduacion"])
                elif ("precio" in groupMap.keys()):
                    tuplaKey = groupDic["precio"]
                else:
                    tuplaKey = groupDic["graduacion"]

                grupo = results.groups(next(iter(groupMap)))[tuplaKey]
            except:
                grupo = []

            for documentIndex in grupo[(pagina - 1) * nElementosPagina:pagina *
                                       nElementosPagina]:
                elemento = searcher.stored_fields(documentIndex)
                lista.append(elemento['id'])
            tam = len(grupo)
        elif not (groupDic):
            for r in results[(pagina - 1) * nElementosPagina:pagina *
                             nElementosPagina]:
                lista.append(r['id'])
        return (lista, tam)