Caso de ejemplo: Indexación y búsqueda

Después de haber instalado y configurado Db2 Text Search, hay cuatro pasos que debe seguir antes de realizar búsquedas.

Importante: Net Search Extender (NSE) ya no está soportado en Db2. Utilice la característica Db2 Text Search.
  1. Inicie los servicios de instancia de Db2 Text Search .
  2. Prepare la base de datos para que la utilice Db2 Text Search.
    Habilite la base de datos y utilice el procedimiento de configuración para completar la asociación del servidor de búsqueda de texto. Debe habilitar la base de datos sólo una vez para Db2® Búsqueda de texto. El procedimiento de configuración es necesario en estos casos:
    • La habilitación ha finalizado
    • Para bases de datos con particiones
    • Para configuraciones de servidor de búsqueda de texto autónomo.
    Tenga en cuenta que no puede habilitar Net Search Extender para una base de datos una vez que se haya habilitado para DB2 Text Search.
  3. Cree un índice de búsqueda de texto en una columna que contenga o que vaya a contener texto en el que desea buscar.
  4. Llene de datos el índice de búsqueda de texto. Esta acción añade datos al índice de búsqueda de texto vacío recién creado.

    Para configurar actualizaciones automáticas para los índices de búsqueda de texto de acuerdo con las frecuencias de actualización especificadas, consulte el tema sobre la planificación de una actualización de índice de DB2 Text Search.

Cuando un índice de búsqueda de texto contiene datos, puede realizar la búsqueda en el índice utilizando una sentencia de SQL y puede buscar con XQuery si el índice contiene datos XML.
Como muestra la Figura 1 , debe actualizar los índices de búsqueda de texto existentes, ya sea manual o automáticamente, para reflejar los cambios en la columna de texto con la que está asociado el índice.
Figura 1. Configuración de índices de búsqueda de texto para realizar búsquedas en una instancia sin particiones con un servidor de búsqueda de texto integrado
Los índices de búsqueda de texto requieren una actualización inicial para poder buscarlos y las actualizaciones incrementales para los cambios de datos

Escenario básico

Supongamos que desea que Db2 Text Searchpueda realizar búsquedas en los productos de la tabla PRODUCT de la base de datos SAMPLE. Suponiendo que ya ha creado la base de datos de ejemplo (ejecutando el mandato db2sampl) y que ha establecido la variable de entorno DB2DBDFT en SAMPLE, puede emitir los mandatos siguientes:
	db2ts START FOR TEXT
	db2ts ENABLE DATABASE FOR TEXT
	db2ts CREATE INDEX myschema.productindex FOR TEXT ON product(name)
	db2ts UPDATE INDEX myschema.productindex FOR TEXT
Ahora los nombres de producto y las descripciones que contenidos en la columna NAME de PRODUCT se han indexado y se pueden realizar búsquedas en ellos. Si desea buscar los ID de producto de todas las palas para nieve, puede emitir la siguiente consulta de búsqueda>
	db2 "SELECT pid FROM product WHERE CONTAINS (name, 'snow shovel') = 1"

Escenario de coexistencia para DB2 Text Search y Net Search Extender

Si una base de datos ya está habilitada para Net Search Extender y desea utilizar Text Search en dicha base de datos, puede utilizar la característica de coexistencia de índices para consultar la base de datos.

Inicie la base de datos para la búsqueda de texto.

db2ts start for text 
DB20000I  The SQL command completed successfully. 

Habilite Text Search para una base de datos que ya contenga índices de Net Search Extender.

db2ts enable database for text 
CIE00001 Operation completed successfully 

Cree y actualice un índice de DB2 Text Search en una columna que tenga un índice de Net Search Extender.

db2ts "CREATE INDEX db2ts.title_idx FOR TEXT ON books(title)" 
CIE00001 Operation completed successfully.

db2ts "UPDATE INDEX db2ts.title_idx FOR TEXT" 
CIE00001 Operation completed successfully.  

Active el nuevo índice de DB2 Text Search para cambiar el proceso de consultas del índice NSE al nuevo índice.

db2ts "ALTER INDEX db2ts.title_idx FOR TEXT SET ACTIVE" 
CIE00001 Operation completed successfully. 

Emita una consulta para utilizar el índice de DB2 Text Search.

db2 "select isbn, title from books where contains(title,'top')=1"  

ISBN              TITLE                                
--------------    ------------------------------------- 
123-014014014     Climber's Mountain Tops  
111-223334444     Top of the Mountain: Mountain Lore   
2 record(s) selected. 

No se da soporte a consultas que intentan utilizar ambos tipos de índice. Por ejemplo, aquí la columna de título tiene un índice de DB2 Text Search activo, mientras que la columna bookinfo tiene un índice de Net Search Extender activo. La búsqueda devolverá un error porque todos los índices de texto de una consulta deben tener el mismo tipo de índice.

db2 "select isbn, title from books where contains(title, 'top')=1 and 
contains(bookinfo, '" MOUNTAIN "')=1"   

ISBN              TITLE                                                                                      
------------------ ---------------------------------------------- 

SQL20425N Column "BOOKINFO" in table "BOOKS" was specified as an argument to 
a text search function, but a text search index does not exist for the column. 
SQLSTATE=38H12 

Para evitar este error, cree un índice de DB2 Text Search en la columna bookinfo y actívelo.

db2ts "CREATE INDEX db2ts.bookinfo_idx FOR TEXT ON books( bookinfo )" 
CIE00001 Operation completed successfully. 

db2ts ALTER INDEX db2ts.bookinfo_idx FOR TEXT set active 
CIE00001 Operation completed successfully.