>>-+-CONTAINS------+--------------------------------------------> +-NO_OF_MATCHES-+ '-RANK----------' >----(--descriptor-contexto--,--argumento-búsqueda--)----------><
>>-SEARCH_RESULT------------------------------------------------> >----(--esquema--,--tabla--,--descriptor-contexto--,--argumento-búsqueda--)-> >--------------------------------------------------------------><
Esta sección describe cómo utilizar las funciones SQL proporcionadas con DB2 Text Extender para buscar en las bases de datos DB2 que contienen texto. Le indica cómo:
La utilización de SEARCH_RESULT se describe en el apartado Mejora del rendimiento de la búsqueda.
Cada una de estas funciones de DB2 Text Extender busca las apariciones del argumento de búsqueda en el índice de texto. Si hay 100 000 documentos de texto en la tabla, las funciones CONTAINS, RANK o NO_OF_MATCHES se llaman 100 000 veces. Pero no se busca en el índice de texto 100 000 veces. En su lugar, la primera vez que se llama a la función, se crea una lista interna de todos los documentos que contienen el término de búsqueda; las llamadas posteriores de la función determinan si el documento implicado está en la lista.
Consejo |
---|
Cuando utilice las funciones de DB2 Text Extender para buscar en una tabla, asegúrese de que pasa la columna de descriptores de contexto a la función, en lugar de la columna de texto. Si intenta buscar en una columna de texto, SQL responde con un mensaje que indica que el tipo de datos es incorrecto, por ejemplo: No se ha encontrado ninguna función con el nombre "CONTAINS" que tenga argumentos compatibles en la vía de acceso de la función. |
Si busca texto inmediatamente después de emitir los mandatos ENABLE TEXT TABLE o ENABLE TEXT COLUMN, puede producirse un error RC_SE_EMPTY_INDEX que indica que el índice de texto que crea el mandato no existe todavía. El tiempo que tarda en crearse un índice depende de factores como, por ejemplo, el número de documentos que se indexan y el rendimiento del sistema que realiza la indexación. Puede tardar varios minutos o varias horas, y debe realizarse cuando el sistema está poco cargado como, por ejemplo, por la noche.
Si se recibe este mensaje, intente realizar la búsqueda más tarde o utilice GET INDEX STATUS para comprobar si se han producido errores de indexación.
Este ejemplo demuestra cómo la función CONTAINS busca texto en los documentos identificados por un descriptor de contexto. Devuelve 1 si el texto satisface el argumento de búsqueda, de lo contrario, devuelve 0.
db2=>SELECT DATE, SUBJECT FROM DB2TX.SAMPLE WHERE DB2TX.CONTAINS (COMMENTHANDLE, '"compress"') = 1
En este ejemplo, se busca el término compress en el texto al que los descriptores de contexto hacen referencia en la columna COMMENTHANDLE. Los descriptores de contexto de la columna COMMENTHANDLE indican dónde está indexado el texto COMMENT.
Consejo |
---|
Si ha creado identificadores en mayúsculas y minúsculas para las tablas o las columnas, recuerde que estos nombres deben ir entre comillas dobles. Por ejemplo: db2=>SELECT DATE, SUBJECT FROM "db2tx.sample" WHERE DB2TX.CONTAINS (COMMENTHANDLE, '"compress"') = 1 Si especifica sentencias select de DB2 desde la línea de mandatos, el analizador de la línea de mandatos del sistema operativo elimina los caracteres especiales como, por ejemplo, las comillas dobles de la serie de mandatos, por lo que debe utilizar una barra inclinada invertida para enmascarar estos símbolos especiales. Por ejemplo: DB2 "SELECT DB2TX.file(COMMENTHANDLE) FROM db2tx.sample" WHERE DB2TX.CONTAINS (COMMENTHANDLE, '\"compress\"') = 1 |
Utilice la función NO_OF_MATCHES para determinar la frecuencia con que se encuentran los criterios de búsqueda en cada documento de texto.
db2=>WITH TEMPTABLE(DATE, SUBJECT, MATCHES) AS (SELECT DATE, SUBJECT, DB2TX.NO_OF_MATCHES(COMMENTHANDLE,'"compress"') FROM DB2TX.SAMPLE) SELECT * FROM TEMPTABLE WHERE MATCHES > 0
NO_OF_MATCHES devuelve un valor entero.
RANK es un valor absoluto que indica el grado de coincidencia con los criterios de búsqueda del documento en relación a otros documentos encontrados. El valor indica el número de coincidencias encontradas en el documento en relación al tamaño del documento. Puede obtener el rango de un documento encontrado utilizando la función RANK.
Este es un ejemplo:
db2=>WITH TEMPTABLE(DATE, SUBJECT, RANK) AS (SELECT DATE, SUBJECT, DB2TX.RANK(COMMENTHANDLE,'"compress"') FROM DB2TX.SAMPLE) SELECT * FROM TEMPTABLE WHERE RANK > 0 ORDER BY RANK DESC
RANK devuelve un valor DOUBLE entre 0 y 1.