Full Text Search no Oracle - Parte 01

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (0)

Este artigo irá demonstrar características do Oracle interMedia Text, um pool de ferramentas do interMedia que irá basicamente trabalhar com a indexação e busca de conteúdo web e documentos com formatação Word, PDF, etc.

Full Text Search no Oracle - Parte 01 

Explorando o Oracle interMedia

Carlos Duarte, Ricardo Rezende e Rodrigo Righetti

O Oracle interMedia é um conjunto de ferramentas que possibilitam o armazenamento e manipulação de dados amplamente usados na web como texto, dados, imagens, áudio e vídeo. Este conjunto de ferramentas está incluído nas versões Standard e Enterprise Edition desde a versão 8i do produto.

Como característica, permite que o banco de dados Oracle armazene, gerencie e recupere informações de localização geográfica, imagens, áudio, vídeo ou qualquer outro dado multimídia de maneira integrada com outras informações da corporação.

Este artigo irá demonstrar características do Oracle interMedia Text, um pool de ferramentas do interMedia que irá basicamente trabalhar com a indexação e busca de conteúdo web e documentos com formatação Word, PDF, etc.

Instalando o Oracle intermédia

O Oracle interMedia é instalado e configurado juntamente com o BD Oracle 10g mas, se por algum motivo você precisar instalá-lo manualmente, basta seguir os tópicos abaixo:

·  Decisões antes da instalação;

·  Etapas de pré-instalação;

·  Etapas de instalação.

Decisões antes da instalação

A procedure responsável pela instalação do interMedia cria os usuários ORDSYS, ORDPLUGINS, SI_INFORMTN_SCHEMA e MDSYS. Estes usuários são apenas contas padrão do BD Oracle com alguns privilégios especiais.

Para que todo o processo seja bem sucedido, você deverá tomar as seguintes decisões:

·  Defina qual a tablespace que será usada pelos usuários do interMedia (ORDSYS, ORDPLUGINS e SI_INFORMTN_SCHEMA) e para o usuário do Spatial/interMedia Location Services (MDSYS). A Oracle sugere que você utilize a tablespace SYSAUX para ambos, mas a decisão é sua.

·  Será necessário definir a senha para os quatro usuários criados na instalação, pois a procedure de instalação utiliza senhas padrão, trava as contas (lock) e expira as senhas. É necessário que você altere as senhas e destrave as contas (unlock) após a instalação caso deseje conectar-se diretamente nestas contas.

 

A senha padrão das quatro contas é o nome da própria conta, ou seja, para a conta ORDSYS a senha é ORDSYS. Nada muito seguro, não acha?

O processo de instalação concede ainda o privilégio de execução (EXECUTE) para o grupo de usuários PUBLIC nos pacotes (packages) e objetos do interMedia instalados nos esquemas ORDSYS, ORDPLUGINS e SI_INFORMTN_SCHEMA.

Etapas de pré-instalação

É necessário executar as etapas de pré-instalação quando se deseja instalar e configurar manualmente o Oracle interMedia. Caso necessite de instruções mais específicas para cada etapa, veja o guia de instalação Oracle para o seu sistema operacional. Estas informações estão disponíveis, gratuitamente, em http://tahiti.oracle.com/.

Etapa 1: Instale o Oracle Database na versão e Release desejados (9i ou 10g), incluindo PL/SQL e Oracle JVM (caso já tenha instalado, pode pular esta etapa);

Etapa 2: Crie o banco de dados (caso já tenha um banco de dados criado, pode pular esta etapa);

Etapa 3: Inicialize o banco de dados;

Etapa 4: Verifique se o Oracle JVM está instalado e válido.

 

Você pode verificar se o Oracle JVM está corretamente instalado executando a consulta da Listagem 1 através do SQL*Plus conectado como SYSDBA.


28-01-2008pic13.JPG 

Listagem 1. Verificando a correta instalação do Oracle JVM.

Etapas de instalação

Na instalação do banco de dados, é possível adicionar a instalação do Oracle interMedia e tudo será transparente.
Caso não tenha sido instalado juntamente com o banco de dados, é possível fazê-lo sem problemas, apenas seguindo alguns procedimentos.

Inicialmente, tenha certeza que existe pelo menos 10MB de espaço em disco para o dicionário de dados e inclua (Linux/UNIX) o diretório $ORACLE_HOME/ctx/lib na variável de ambiente LD_LIBRARY_PATH.

É necessário executar as etapas descritas na seqüência para instalar o Oracle interMedia, mas lembre-se, execute estes passos apenas se está instalando/configurando o Oracle interMedia manualmente. Não é necessário executar estes passos caso esteja utilizando o DBCA (DataBase Configuration Assistant). Este é um utilitário da própria Oracle para a criação e configuração de bancos de dados. É uma ferramenta bastante interessante e o assunto renderia um artigo próprio, o que fugiria do foco desta matéria.

Informações completas sobre o DBCA podem ser encontradas em:

o Oracle 9i: http://download-east.oracle.com/docs/cd/B10501_01/server.920/a96521/create.htm#1000144

o Oracle 10g: http://www.oracle.com/pls/db102/to_URL?remark=ranked&urlname=http:%2F%2Fdownload.oracle.com%2Fdocs%2Fcd%2FB19306_01%2Fserver.102%2Fb14196%2Finstall003.htm%23ADMQS0021

 

Listamos também a instalação para as versões 9i (ou anteriores) e 10g, escolha a sua.

Instalando em Oracle 9i

Etapa 1: Use o Oracle Universal Installer (OUI) para instalar os arquivos necessários para o interMedia no seu sistema. O OUI adicionará o diretório <ORACLE_HOME>/ord que contém estes arquivos. Apenas selecione a opção interMedia na caixa de seleção do OUI.

Etapa 2: Crie uma tablespace para o interMedia. Não há segredos, o único detalhe é criar esta tablespace com pelo menos 50MB. A Listagem 2 mostra um exemplo desta criação.


28-01-2008pic14.JPG 

Listagem 2. Criação de tablespace.

Etapa 3: Crie os usuários, conceda os devidos privilégios e instale o interMedia. Estou considerando que você está instalando o interMedia manualmente portanto, é necessário criar os usuários específicos. Para isso, conecte-se ao SQL*Plus, como SYSDBA, e siga os procedimentos da Listagem 3.


28-01-2008pic15.JPG

Listagem 3. Criando os usuários, concedendo os privilégios e instalando o interMedia.

Etapa 4: Inicialize o listener.

Um detalhe é que o listener deve estar configurado para utilização de chamadas de procedures externas. Verifique no arquivo tnsnames.ora se existe a entrada chamada extproc_connection_data e no arquivo listener.ora se existe a entrada chamada extproc.

Caso queira ou necessite, dê uma olhada na documentação disponível em http://tahiti.oracle.com.

Se você executou com sucesso todos os passos acima, o interMedia está pronto para ser utilizado.

Instalando em Oracle 10g

Etapa 1: Use o Oracle Universal Installer (OUI) da mesma forma que na Etapa 1 da instalação em Oracle 9i.

Etapa 2: Crie uma tablespace para o interMedia. Siga o mesmo procedimento da Etapa 2 da instalação em Oracle 9i alterando apenas o nome da tablespace para SYSAUX (sugestão da Oracle).

Etapa 3: Crie os usuários e conceda os devidos privilégios. Para isso, conecte-se ao SQL*Plus, como SYSDBA, e siga os procedimentos da Listagem 4 que é um pouco diferente da instalação em Oracle 9i, porém seguindo os mesmos conceitos.


28-01-2008pic16.JPG 

Listagem 4. Criando os usuários e concedendo os privilégios.

O procedimento mostrado na Listagem 4 está “chamando” o script ordinst.sql e passando como parâmetros (são dois parâmetros) a tablespace para o interMedia e para o Location Services (os location services – serviços de localização – são utilizados para interagir com sistemas de informação geográficas – GIS). Como sugestão, foi utilizada a tablespace SYSAUX para ambos. Note também que <ORACLE_HOME> é o diretório em que o Oracle foi instalado.

Etapa 4: Instale os tipos (types) e pacotes do interMedia, conforme Listagem 5.


28-01-2008pic17.JPG 

Listagem 5. Instalando o interMedia.

 

Etapa 5: Inicialize o listener. Veja a Etapa 4 da instalação em Oracle 9i.

Não se esqueça que o listener deve estar configurado para utilização de chamadas de procedures externas, da mesma forma que na instalação em Oracle 9i.

A partir de agora, em especial, falaremos sobre uma das mais poderosas opções do interMedia que é uma ferramenta ainda subutilizada, o Oracle Text.

Oracle interMedia Text

O Oracle Text é a função dentro do Oracle interMedia responsável pela tarefa de Full Text Search e pode ser explorado de muitas maneiras:

·  Pesquisa por texto: utilizado para aplicativos que necessitam de buscas avançadas por texto;

·  Indexação de texto usando muitas fontes de dados: para aplicativos que gerenciam dados de texto armazenados no banco e também em arquivos externos como doc, pdf, xls, xml e internet;

·  Pesquisa inteligente: utilizada para buscar não somente por igualdade, mas também por semelhança, por assunto ou contexto.

 

A Listagem 6 mostra alguns exemplos simples de uma pesquisa sem a utilização do Oracle interMedia.

 

28-01-2008pic18.JPG
Listagem 6. Exemplo de pesquisa por texto sem a utilização do Oracle interMedia.

 

As funções LIKE e INSTR podem ser usadas nos aplicativos com eficiência, mas sua eficácia se aplica, em geral, à pesquisa em tabelas pequenas onde não é necessária a complexidade de pesquisas do tipo:

·  Encontrar palavras por proximidade, por exemplo: uma determinada palavra que não esteja a uma distância superior a cinco palavras de uma outra;

·  Encontrar palavras determinadas e fazer uma ordenação por relevância;

·  Busca por estilo de letra.

Vejamos na Listagem 7 a criação básica de um índice interMedia que nos permitirá usufruir das funcionalidades descritas acima com muito mais performance.


28-01-2008pic19.JPG 

Listagem 7. Criando um índice interMedia.

CREATE INDEX SQLMAG_IDX ON SQLMAG(TEXTF) INDEXTYPE IS CTXS   YS.CONTEXT;

 

No caso da Listagem 7, foi introduzida a cláusula INDEXTYPE, responsável por informar ao Oracle que o índice criado é do tipo Oracle Text.

Após a criação do índice do tipo CONTEXT podemos começar a usar as funcionalidades do Oracle interMedia Text.

Demonstraremos alguns exemplos na Listagem 8 e mais adiante veremos detalhadamente a sintaxe e como utilizá-la.

 

SELECT TEXTID

  FROM SQLMAG

  WHERE CONTAINS(TEXTF,’near((Intermedia,Como),3)’) > 0 ;

 

SELECT SCORE(1), TEXTID

  FROM SQLMAG

  WHERE CONTAINS(TEXTF,’Oracle or Intermedia’,1) > 0

  ORDER BY SCORE(1) DESC;

Listagem 8. Exemplos de utilização do Oracle interMedia Text.


O primeiro exemplo da Listagem 8 busca a palavra Intermedia porém, esta palavra não poderá estar a uma distância maior do que 3 palavras da palavra Como. Se o Oracle não encontrar a palavra Como nesta distância específica, esta ocorrência de Intermedia não será retornada.

A segunda consulta busca as palavras Oracle ou Intermedia ordenando-as por relevância no texto.

O Oracle Text utiliza-se de recursos oferecidos pelo banco, e ficam armazenados sob o esquema CTXSYS. Na Listagem 9 é possível verificar alguns dos tipos de índices disponíveis para utilização na indexação.

28-01-2008pic20.JPG
 

Listagem 9. Tipos de índices do esquema CTXSYS.


Índices CONTEXT

O tipo de índice CONTEXT é usado para indexar grandes quantidades de texto como documentos Word, PDF, XML, HTML ou texto puro.

Armazene documentos binários como Word e PDF em campos BLOB e para documentos de texto puro, campos CLOB se estes não forem HTML ou tiverem TAGS especificas

Nas Listagem 10 e 11 temos um exemplo completo de como carregar estes documentos para uma tabela.

 28-01-2008pic21.JPG


Listagem 10. Criação da estrutura para armazenamento dos dados.

 28-01-2008pic22.JPG

Listagem 11. Carga dos arquivos.

 

Na Listagem 12 criaremos um índice do tipo CONTEXT na coluna “doc”. Em uma eventual alteração do documento armazenado que você queira fazer, o Oracle apenas o trará “de volta” para que você possa alterá-lo. Após a alteração do documento, será necessário reconstruir o índice para “aplicar” as alterações.

É possível utilizar o FILE_DATASTORE (veremos esta opção mais à frente) para lidar com arquivos externos, mas é mais interessante fazer o armazenamento no BD porque o processo de recovery é mais simples e há mais segurança.

 

Listagem 12. Criação do índice e geração da estatística.

CREATE INDEX my_docs_doc_idx ON my_docs(doc) INDEXTYPE IS CTXSYS.CONTEXT;

EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'MY_DOCS', cascade=>TRUE);

 

Na Listagem 13 consultamos a tabela procurando um conteúdo especifico. O primeiro exemplo encontra todos os documentos na coluna DOC que contenham a palavra SQL SERVER. O segundo exemplo segue o mesmo critério, porém procurando pela palavra XML.

28-01-2008pic23.JPG

Listagem 13. Consulta por um conteúdo específico.

 

No caso da indexação de arquivos HTML, ele não irá indexar as tags. Somente o texto será considerado. Entretanto, se o conteúdo de um arquivo HTML for inserido diretamente em um campo CLOB, o índice de CONTEXT não irá ignorar as tags.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?