示例#1
0
    def __execute_query_test(self, dirindex, chunks_info_in_memory):
        '''Ejecuta query test del índice especificado.

        Args:
            dirindex (string): directorio de índice.
            chunks_info_in_memory (bool): indica si la información de chunks se
                debe cargar en RAM.

        Returns:
            index (Index): índice al que pertenecen las estadísticas.
            min_times (double list): listado de tiempo mínimo de query.
            avg_times (double list): listado de tiempo promedio de query.
            max_times (double list): listado de tiempo máximo de query.
        '''
        index = Index(dirindex)
        self.__check_queries_load()

        browser = Browser(index, BrowseType.Boolean)

        # Listados de stats.
        min_times = []
        avg_times = []
        max_times = []

        index.load(chunks_info_in_memory)
        index_name = path.basename(dirindex)
        evtype = "inmemory" if chunks_info_in_memory else "indisk"
        queries_count = len(self.__queries)

        iterations = self.__iterations + 1
        for i in range(0, iterations):
            info = "{0} ({1}) - evaluación nro. {2}/{3}"
            print(info.format(index_name, evtype, i, iterations))
            min_time = None
            sum_time = 0
            max_time = 0
            for query in self.__queries:
                # Obtención de posting list.
                browser.browse(query)

                # Obtención de benchmark de última búsqueda.
                time = browser.get_benchmark()

                sum_time += time

                if time > max_time:
                    max_time = time

                if not min_time or time < min_time:
                    min_time = time

            avg_time = sum_time / queries_count

            # Append de times (si no es 'warm-up').
            if i > 0:
                min_times.append(min_time * 1000)
                avg_times.append(avg_time * 1000)
                max_times.append(max_time * 1000)

        return index, min_times, avg_times, max_times
示例#2
0
def main(args):
    '''Punto de entrada de app.'''
    utils.clearscreen()

    index1 = Index("../output/test/index-1/")
    index2 = Index("../output/test/index-2/")

    print("Cargando índice 1...")
    index1.load()
    print("Cargando índice 2...")
    index2.load()

    # Browser en índice resultante.
    index1_browser = Browser(index1, BrowseType.Boolean)
    index2_browser = Browser(index1, BrowseType.Boolean)

    while True:
        text = input("\nBúsqueda: ").lower().strip()

        for i in range(0, 2):
            if i == 0:
                doc_ids = index1_browser.browse(text)
                print("Búsqueda en índice 1 (total {0}):".format(len(doc_ids)))
                doc_ids1 = doc_ids
            else:
                print("")
                doc_ids = index2_browser.browse(text)
                print("Búsqueda en índice 2 (total {0}):".format(len(doc_ids)))

                if doc_ids != doc_ids1:
                    input("ATENCIÓN: Las postings son distintas...")

            doc_number = 1
            if not doc_ids:
                msg = "Ningún documento coincide con la búsqueda."
                print(msg)
            else:
                # Impresión de primeros 25 docs.
                for doc_id in doc_ids[0:25]:
                    if i == 0:
                        doc = index1.get_doc_by_id(int(doc_id))
                    else:
                        doc = index2.get_doc_by_id(int(doc_id))

                    sdoc = str(doc_number) + ". " + doc + " ({0})"
                    print(sdoc.format(doc_id))
                    doc_number += 1

            print("")

            if i == 0:
                print("Benchmark:", index1_browser.get_benchmark(), "segundos")
            else:
                print("Benchmark:", index2_browser.get_benchmark(), "segundos")

        input("\nPresione una tecla para continuar...")
        utils.clearscreen()
示例#3
0
def main(args):
    '''Punto de entrada de app.'''

    utils.clearscreen()

    index = Index("../output/test/index-1/")

    print("Cargando índice...")
    index.load(chunks_info_in_memory=False)

    # Browser en índice resultante.
    browser = Browser(index, BrowseType.Boolean)

    while True:
        text = input("\nBúsqueda: ").lower().strip()

        print("")
        doc_ids = browser.browse(text)
        print("Búsqueda en índice (total {0}):".format(len(doc_ids)))

        doc_number = 1
        if not doc_ids:
            msg = "Ningún documento coincide con la búsqueda."
            print(msg)
        else:
            # Impresión de primeros 25 docs.
            for doc_id in doc_ids[0:25]:
                doc = index.get_doc_by_id(int(doc_id))

                sdoc = str(doc_number) + ". " + doc + " ({0})"
                print(sdoc.format(doc_id))
                doc_number += 1

        print("")

        print("Benchmark:", browser.get_benchmark(), "segundos")

    input("\nPresione una tecla para continuar...")
    utils.clearscreen()
示例#4
0
def main(args):
    '''Punto de entrada de app.'''
    utils.clearscreen()

    indexer = Indexer(DIRIN, CorpusTypes.Text, reuse_tmp=True)

    # Generación de índice 1.
    index1, index1_error = indexer.create_index(INDEX1_DIROUT, False, 64)

    # Generacón de índice 2
    indexer.doc_encode = [
        EncodeTypes.Unary, EncodeTypes.VariableByte, EncodeTypes.VariableByte,
        EncodeTypes.EliasFano, EncodeTypes.Simple16, EncodeTypes.BitPacking,
        EncodeTypes.PForDelta
    ]

    indexer.freq_encode = [EncodeTypes.Unary, EncodeTypes.VariableByte]

    index2, index2_error = indexer.create_index(INDEX2_DIROUT, False, 128)

    if index1_error == IndexerStatusTypes.Already_Indexed:
        print("Indice 1 ya indexado.")
    elif index1_error == IndexerStatusTypes.Collection_Non_Existent:
        print("Directorio de colección de índice 1 inexistente.")
        return

    if index2_error == IndexerStatusTypes.Already_Indexed:
        print("Indice 2 ya indexado.")
    elif index2_error == IndexerStatusTypes.Collection_Non_Existent:
        print("Directorio de colección de índice 2 inexistente.")
        return

    print("Cargando índice 1...")
    index1.load(chunks_info_in_memory=True)
    print("Cargando índice 2...")
    index2.load()

    # Browser en índice resultante.
    index1_browser = Browser(index1, BrowseType.Boolean)
    index2_browser = Browser(index2, BrowseType.Boolean)

    while True:
        text = input("\nBúsqueda: ").lower().strip()

        for i in range(0, 2):
            if i == 0:
                print("Búsqueda en índice 1:")
                doc_ids = index1_browser.browse(text)
                doc_ids1 = doc_ids
            else:
                print("")
                print("Búsqueda en índice 2:")
                doc_ids = index2_browser.browse(text)

                if doc_ids != doc_ids1:
                    print("")
                    print(doc_ids)
                    print(doc_ids1)
                    input(
                        "ATENCIÓN: Las postings son distintas ({0})...".format(
                            text))
            doc_number = 1
            if not doc_ids:
                msg = "Ningún documento coincide con la búsqueda."
                print(msg)

            for doc_id in doc_ids:
                if i == 0:
                    doc = index1.get_doc_by_id(int(doc_id))
                else:
                    doc = index2.get_doc_by_id(int(doc_id))

                sdoc = str(doc_number) + ". " + doc + " ({0})"
                print(sdoc.format(doc_id))
                doc_number += 1

            print("")
            if i == 0:
                print("Benchmark:", index1_browser.get_benchmark(), "segundos")
            else:
                print("Benchmark:", index2_browser.get_benchmark(), "segundos")

        input("\nPresione una tecla para continuar...")
        utils.clearscreen()