Recientemente he estado hablando con gente interesada en la gestión de contenidos de documentos y, en general, la mayoría utiliza formatos PDF. El anterior artículo se basaba únicamente en documentos word, y he creído interesante hacer un ejemplo de como Intermedia realiza la indexación de documentos word y PDF de forma totalmente transparente.
Algo importante a mencionar sobre los índices context es que éstos no se mantienen automáticamente con las inserciones. Hay una causa mayor referente al impacto del rendimiento que tendría dicha reconstrucción. En este caso, se incluyen seis nuevas filas BFILE vinculadas a ficheros PDF existentes en el mismo directorio. Posteriormente a la inserción, es preciso reconstruir el índice para recrearlo con la nueva relación de términos.
Para la implementación completa del ejemplo (creación de la tabla, el índice, el objeto directory y temas relativos a privilegios) es preciso seguir los pasos de la Parte I.
Algo importante a mencionar sobre los índices context es que éstos no se mantienen automáticamente con las inserciones. Hay una causa mayor referente al impacto del rendimiento que tendría dicha reconstrucción. En este caso, se incluyen seis nuevas filas BFILE vinculadas a ficheros PDF existentes en el mismo directorio. Posteriormente a la inserción, es preciso reconstruir el índice para recrearlo con la nueva relación de términos.
Para la implementación completa del ejemplo (creación de la tabla, el índice, el objeto directory y temas relativos a privilegios) es preciso seguir los pasos de la Parte I.
Pasos:
Parte I.
1.- Creación de una tabla con columna BFILE
2.- Creación de un DIRECTORY oracle para vincular los documentos Word.
3.- Concesión de privilegios sobre el DIRECTORY al usuario CTXSYS, propietario de Oracle Context.
4.- Inserción de las filas en la tabla DOCUMENTOS.
5.- Indexación de la columna BFILE.
6.- Ejemplos de consultas.
Parte II.
7.- Inserción de las filas de documentos PDF.
8.- Reconstrucción del índice context.
9.- Ejemplos de consultas.
SQL> host dir c:\documentos
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es: 2416-B169
Directorio de c:\documentos
09/05/2005 09:31 <DIR> .
09/05/2005 09:31 <DIR> ..
25/04/2005 13:21 271.360 EntornosNoProd_Permisos extendidos.doc
25/04/2005 13:21 31.232 normas_dba.doc
25/04/2005 13:21 379.904 creacion_entorno_bbdd.doc
25/04/2005 13:21 252.928 CREACION_INSTANCIA_DE_ORACLE_EN_UNIX_v2_4.doc
04/06/2002 21:58 1.479.383 Oracle9i - New Features for Administrators - Vol I.pdf
04/06/2002 21:59 1.542.651 Oracle9i - New Features for Administrators - Vol II.pdf
04/06/2002 21:55 1.244.186 Oracle9i - New Features for Developers - Vol I.pdf
04/06/2002 21:57 2.342.972 Oracle9i - New Features for Developers - Vol II.pdf
04/06/2002 21:13 1.245.254 Oracle9i - New Features Overview - Vol I.pdf
04/06/2002 21:14 801.119 Oracle9i - New Features Overview - Vol II.pdf
10 archivos 9.935.424 bytes
2 dirs 4.970.479.616 bytes libres
SQL> -- Inserción de los seis documentos PDF sobre la tabla
SQL> -- y recreación del índice CONTEXT
SQL> -----------------------------------------------------------------------------------
SQL> insert into documentos values
2 (5,'PDF','Oracle9i - New Features for Administrators - Vol I.pdf',
3 BFILENAME('DOCUMENTOS_WORD','Oracle9i - New Features for Administrators - Vol I.pdf'));
1 row created.
SQL> insert into documentos values
2 (6,'PDF','Oracle9i - New Features for Administrators - Vol II.pdf',
3 BFILENAME('DOCUMENTOS_WORD','Oracle9i - New Features for Administrators - Vol II.pdf'));
1 row created.
SQL> insert into documentos values
2 (7,'PDF','Oracle9i - New Features for Developers - Vol I.pdf',
3 BFILENAME('DOCUMENTOS_WORD','Oracle9i - New Features for Developers - Vol I.pdf'));
1 row created.
SQL> insert into documentos values
2 (8,'PDF','Oracle9i - New Features for Developers - Vol II.pdf',
3 BFILENAME('DOCUMENTOS_WORD','Oracle9i - New Features for Developers - Vol II.pdf'));
1 row created.
SQL> insert into documentos values
2 (9,'PDF','Oracle9i - New Features Overview - Vol I.pdf',
3 BFILENAME('DOCUMENTOS_WORD','Oracle9i - New Features Overview - Vol I.pdf'));
1 row created.
SQL> insert into documentos values
2 (10,'PDF','Oracle9i - New Features Overview - Vol II.pdf',
3 BFILENAME('DOCUMENTOS_WORD','Oracle9i - New Features Overview - Vol II.pdf'));
1 row created.
SQL> commit;
Commit complete.
SQL> ALTER INDEX idx_documentos_doc REBUILD;
Index altered.
-- Las búsquedas CONTEXT sobre índices domain se realizan con la cláusula CONTAINS
-- más documentación al respecto en http://download-west.oracle.com/docs/cd/B10501_01/text.920/a96518/cqoper.htm )
------------------------------------------------------------
-- documentos con la palabra 'tablespace' cerca de 'storage'
SQL> select tipo, titulo
2 from documentos
3 where CONTAINS(documento, 'tablespace near storage') > 0;
TIPO TITULO
---- ------------------------------------------------------------
PDF Oracle9i - New Features Overview - Vol II.pdf
PDF Oracle9i - New Features Overview - Vol I.pdf
WORD Creación de instancia Oracle en UNIX.
WORD Normativa de DBA.
-- documentos con una palabra parecida a 'locally' en un 70%
SQL> select tipo, titulo
2 from documentos
3 where CONTAINS(documento, 'fuzzy(locally, 70, 6, weight)', 1) > 0;
TIPO TITULO
---- ------------------------------------------------------------
PDF Oracle9i - New Features Overview - Vol II.pdf
PDF Oracle9i - New Features Overview - Vol I.pdf
WORD Creación de un entorno de BBDD.
-- documentos con una palabra parecida a 'locally' en un 60%
-- nota: la palabra LOCAL aparece en estos dos nuevos documentos
SQL> select tipo, titulo
2 from documentos
3 where CONTAINS(documento, 'fuzzy(locally, 60, 6, weight)', 1) > 0;
TIPO TITULO
---- ------------------------------------------------------------
PDF Oracle9i - New Features Overview - Vol II.pdf
PDF Oracle9i - New Features Overview - Vol I.pdf
WORD Creación de instancia Oracle en UNIX.
WORD Creación de un entorno de BBDD.
WORD Entornos no producción. Permisos extendidos.
-- documentos que hablen sobre 'listener'
SQL> select tipo, titulo
2 from documentos
3 where CONTAINS(documento, 'about(listener)') > 0;
TIPO TITULO
---- ------------------------------------------------------------
PDF Oracle9i - New Features Overview - Vol II.pdf
WORD Creación de instancia Oracle en UNIX.
WORD Normativa de DBA.
-- relevancia de documentos que hablan de 'listener'
-- nota: en 'Normativa de DBA', efectivamente, se habla bastante menos sobre el listener.
SQL> select tipo, CONTAINS(documento, 'about(listener)')||'%' relevancia, titulo
2 from documentos
3 where CONTAINS(documento, 'about(listener)') > 0;
TIPO RELEVANCIA TITULO
---- ---------- ------------------------------------------------------------
PDF 41% Oracle9i - New Features Overview - Vol II.pdf
WORD 91% Creación de instancia Oracle en UNIX.
WORD 23% Normativa de DBA.
Más información en http://download-west.oracle.com/docs/cd/B10501_01/text.920/a96518/csql.htm#21732