Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Visual FoxPro - Usando Full Text Index, Notas de estudo de Sistemas de Informação

VFP e técnicas de codificação da linguagem.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 28/09/2010

francis-barrimbhal-8
francis-barrimbhal-8 🇧🇷

4.6

(16)

26 documentos

1 / 4

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Página 1Visual Fox Pro
9/28/2010 2:34:37 PMhttp://msdn.microsoft.com/pt-br/library/cc564872.aspx
HomePage Biblioteca Aprender Downloads Suporte Comunidade Entrar |
Brasil
-
Visual Fox Pro
Usando Full Text Index
Originalmente publicado na Universal Thread Magazine
http://www.UniversalThread.com/Portuguese/Magazine
O manejo de grandes volumes de texto sempre é uma complicação para os sistemas e para nós, os desenvolvedores . Quando temos a necessidade de manejar
campos com grandes quantidades de texto começam nossas complicações e isto se potencializa se o usuário necessita buscar uma palavra, por exemplo na
primera palavra da frase, ou uma que esteja em qualquer parte da frase. Aqui é onde fazem sua aparição triunfal os produtos que permitem fazer índices sobre
estes campos.
Usando Full Text Index com MS SQL Server
Um exemplo claro onde encontramos esta necessidade é um sistema para bibliotecas, onde tenhamos uma tabela com os dados dos livros e esta tabela tenha um
campo com um breve resumo (70 palavras) do conteúdo do livro e deve existir a possibilidade de buscar uma palavra dentro desta “breve” descrição.
É certo que existem instrucões para fazê-lo como o LIKE e os meta caracteres de busca, mas tentaram alguma vez fazer uma busca de uma palavra dentro de
uma tabela de 20000 registros com um campo de 2100 caracteres com um LIKE?
Bem, se quiserem fazer uma busca similar à anterior e obter a resposta em tempos razoáveis vão necessitar de um índice específico, não os clássicos mas um
especial, que no Microsoft SQL Server (SQL) se chama Full Text Index (FTI).
Conto-lhes um teste real, em uma tabela de 2 milhões de registros que tem um campo de 75 caracteres, fazer uma busca com LIKE que retorna um registro com
uma quantidade correspondente (SELECT COUNT ) leva 1’ 22” (um minuto e 22 segundos) e a mesma consulta através de um FTI demora 5” na primeira vez e 3”
nas subsequentes. Nada mal.
Full Text Search é o serviço de indexação de texto livre de que dispõe o Windows e se pode usar para buscas em páginas HTML entre outras tantas coisas. Este
serviço está integrado ao Microsoft SQL Server 2000 instalado junto com o servidor da base de dados) e com Microsoft SQL Server 7.0 (mas que solicitar a
instalação, posto que não está selecionada por default). Este mesmo serviço é o que resolve nosso problema.
Figura 1: Componentes do SQL Server (extraído do Book OnLine do Microsfot SQL Server)
Quando instalarem FTI verão dentro do SQL Service Manager (ícone que fica no Tray Icon) um item (no combo de serviços) correspondente ao Microsoft Search.
poderão ver que este serviço funciona num processo separado do SQL e que pode ser inciado ou encerrado separadamente. Ou seja, o FTI estará START ou
STOP mas desde que o SQL esteja START. Da mesma forma que o SQL, podemos setar para que o serviço de FTI se inicie ao ligar a máquina.
Como mencionado o serviço funciona em separado, como também o manejo de índices (se bem que esteja muito integrado). Isto implica que quando quiserem
usar um índice de FTI devem habilitá-lo a partir de uma opção especial.
Cada tabela de uma base de dados poderá ter um arquivo de FTI relacionado, podendo ter dentro deste índice, um ou mais campos indexados. A este índice
denominamos CATALOGO.
A diferença de um índice comum de SQL, ao finalizar a criação de um catálogo este não está pronto para ser usado mas deve ser populado. Este é um proceso
que se dispara separadamente e que faz com que o índice se carregue com o conteúdo correspondente.
Vejamos um exemplo simples: neste caso vamos criar um catálogo dentro da base de dados PUBS que vem com SQL, para a tabela TITLES.
Figura 2: Criando um catálogo dentro de uma base de dados
pf3
pf4

Pré-visualização parcial do texto

Baixe Visual FoxPro - Usando Full Text Index e outras Notas de estudo em PDF para Sistemas de Informação, somente na Docsity!

HomePage Biblioteca Aprender Downloads Suporte Comunidade (^) Entrar |

Brasil -

Visual Fox Pro

Usando Full Text Index

Originalmente publicado na Universal Thread Magazine http://www.UniversalThread.com/Portuguese/Magazine

O manejo de grandes volumes de texto sempre é uma complicação para os sistemas e para nós, os desenvolvedores. Quando temos a necessidade de manejar campos com grandes quantidades de texto começam nossas complicações e isto se potencializa se o usuário necessita buscar uma palavra, por exemplo na primera palavra da frase, ou uma que esteja em qualquer parte da frase. Aqui é onde fazem sua aparição triunfal os produtos que permitem fazer índices sobre estes campos.

Usando Full Text Index com MS SQL Server

Um exemplo claro onde encontramos esta necessidade é um sistema para bibliotecas, onde tenhamos uma tabela com os dados dos livros e esta tabela tenha um campo com um breve resumo (70 palavras) do conteúdo do livro e deve existir a possibilidade de buscar uma palavra dentro desta “breve” descrição.

É certo que existem instrucões para fazê-lo como o LIKE e os meta caracteres de busca, mas já tentaram alguma vez fazer uma busca de uma palavra dentro de uma tabela de 20000 registros com um campo de 2100 caracteres com um LIKE?

Bem, se quiserem fazer uma busca similar à anterior e obter a resposta em tempos razoáveis vão necessitar de um índice específico, não os clássicos mas um especial, que no Microsoft SQL Server (SQL) se chama Full Text Index (FTI).

Conto-lhes um teste real, em uma tabela de 2 milhões de registros que tem um campo de 75 caracteres, fazer uma busca com LIKE que retorna um registro com uma quantidade correspondente (SELECT COUNT) leva 1’ 22” (um minuto e 22 segundos) e a mesma consulta através de um FTI demora 5” na primeira vez e 3” nas subsequentes. Nada mal.

Full Text Search é o serviço de indexação de texto livre de que dispõe o Windows e se pode usar para buscas em páginas HTML entre outras tantas coisas. Este serviço está integrado ao Microsoft SQL Server 2000 (é instalado junto com o servidor da base de dados) e com Microsoft SQL Server 7.0 (mas há que solicitar a instalação, posto que não está selecionada por default). Este mesmo serviço é o que resolve nosso problema.

Figura 1: Componentes do SQL Server (extraído do Book OnLine do Microsfot SQL Server)

Quando instalarem FTI verão dentro do SQL Service Manager (ícone que fica no Tray Icon) um item (no combo de serviços) correspondente ao Microsoft Search. Aí poderão ver que este serviço funciona num processo separado do SQL e que pode ser inciado ou encerrado separadamente. Ou seja, o FTI estará START ou STOP mas desde que o SQL esteja START. Da mesma forma que o SQL, podemos setar para que o serviço de FTI se inicie ao ligar a máquina.

Como mencionado o serviço funciona em separado, como também o manejo de índices (se bem que esteja muito integrado). Isto implica que quando quiserem usar um índice de FTI devem habilitá-lo a partir de uma opção especial.

Cada tabela de uma base de dados poderá ter um arquivo de FTI relacionado, podendo ter dentro deste índice, um ou mais campos indexados. A este índice denominamos CATALOGO.

A diferença de um índice comum de SQL, ao finalizar a criação de um catálogo este não está pronto para ser usado mas deve ser populado. Este é um proceso que se dispara separadamente e que faz com que o índice se carregue com o conteúdo correspondente.

Vejamos um exemplo simples: neste caso vamos criar um catálogo dentro da base de dados PUBS que vem com SQL, para a tabela TITLES.

Figura 2: Criando um catálogo dentro de uma base de dados

Página 2

A partir do Enterprise Manager, fazemos click com o botão direito sobre a tabela e selecionamos Full-Text Index Table e dentro desta opção Define Full-Text Indexing on a Table... que é a única habilitada. Isto nos abrirá um Wizard para criar o catálogo.

Os passos são:

  1. Selecionar o índice de unicidade (Unique index).
  2. Selecionar os campos a indexar. Neste exemplo o campo TITLE.
  3. Selecionar o nome físico do arquivo que conterá o catálogo e seu caminho. No caso do exemplo a escolha será a default e o nome do catalogo TITULOS.
  4. Logo nos é oferecido criar uma tarefa programada (Schedule Task) para popular o catálogo, que em nosso exemplo omitiremos para realizar a geração do catálogo manualmente.
  5. Finalmente confirmamos a criação do catálogo.

Bem, a partir destes passos teremos o catálogo criado porém vazio, como etapa seguinte popularemos o catálogo.

A partir do Enterprise Manager, fazemos click com o botão direito sobre a tabela e selecionamos Full-Text Index Table e dentro desta opção Start Full Population isto nos retornará uma janela indicando que o processo se iniciou.

Figura 3: Populando um catálogo

Como disse antes, isto ocorre em um processo separado pelo qual não receberemos aviso sobre quando termina o processo. Neste caso, por ser uma tabela pequena (por default traz 18 registros) o tempo gasto em popular será muito pequeno, porém em tabelas grandes os tempos aumentarão exponencialmente.

Para saber o estado deste processo, podemos fazer click na pasta de catálogos de Full-Text (Full-Text Catalogs) da base de dados PUBS. Aí veremos que existe um registro do catálogo recém criado e se olharmos na coluna correspondente a estado (Status) veremos “Idle” quando houver terminado o processo ou “Population in Progress” durante o processo.

Finalmente faremos um teste sobre o Query Analizer aonde escreveremos

select * from titles where contains(*, 'silicon')

veremos que retorna os registros correspondentes a dois livros em cujos títulos figura a palavra Silicon.

© 2010 Microsoft Corporation. Todos os direitos reservados.

As principais instruções (na realidade são predicados, posto que normalmente os usamos como parte de um SELECT) para realizar buscas em um catálogo de FTI são:

Instrução Uso

CONTAINS É utilizado para buscar em colunas com dados tipo texto que tenham coincidências exatas ou aproximadas, com palavras exatas ou com certa aproximação. Pode-se buscar uma palavra, uma frase, o prefixo de uma palavra ou uma frase, uma palavra próxima de outra, etc.

FREETEXT É utilizado para buscar em colunas com dados tipo texto que coincidam com o significado e não literalmente com o conteúdo. As consultas realizadas com FREETEXT têm menos precisão que as realizadas com CONTAINS.

CONTAINSTABL

E

Devolve uma tabela com uma ou mais linhas para aquelas colunas que contenham dados de tipo caracter nas que haja coincidências exatas ou aproximadas com palavras simples ou frases, palavras próximas a outra dada (dentro de uma certa distancia), etc.

FREETEXTTABLE Devolve uma tabela com uma ou várias linhas cujas colunas contenham dados de tipo caracter cujos valores coincidam com o significado, ainda que não literalmente, com o texto especificado.

Lista de palavras comuns

Em todo catálogo existem palavras comuns que são desejáveis que não sejam indexadas. SQL traz um arquivo por idioma (NOISE.ESN, NOISE.ENG, NOISE.ENU, etc.) com uma lista de palavras comuns que está no diretório MSSQL\FTData\SQLServer\Config. Estes arquivos podem ser modificados e serão considerados no momento da populacão do catálogo. Se realizarmos ums busca incluindo somente uma palavra incluída no dito arquivo SQL nos responderá com uma mensagem de “somente palavras ignoradas” (A clause of the query contained only ignored words).

Recomendações de uso

Microsoft recomenda não superar um milhão de registros por tabela, minha experiência é que com dois milhões funciona muito bem, inclusive com 4 milhões também, mas há que considerar que os tempos de população serão altos. Bem, o que acontece quando temos tabelas com quantidade maior de registros? No meu caso já tive que fazer sistemas com manejo de 20 milhões de registros e conheço casos que tinham que manejar 50 milhões de registros. A solução será dividir a tabela horizontalmente em várias tabelas e fazer buscas paralelas.

Isto sobretudo é fundamental se se trabalha sobre um SQL 7.0 posto que se mandamos popular um catálogo com maior número de colunas o processo nunca finaliza. Isto na versão 2000 está solucionado, mas o tempo que demora em popular um catálogo de 2 milhões de registros é de umas 6 horas em uma máquina com 2 processadores, 1024 Mb de RAM e discos SCSI e de umas 14 horas em uma máquina com 1 processador, 512 RAM e discos IDE. Foi realizado um teste para popular uma tabela de 15 milhões de registros (com SQL 2000) e demorou 54 horas.

Conclusão

Se alguma vez necessitar trabalhar com indexação de grandes volumes de texto sobre tabelas de SQL Server, você disporá de uma ferramenta realmente poderosa. Full Text Index responde de maneira espetacular nas consultas complicadas e é suficientemente versátil para trabalhar em máquinas não tão potentes. A única precaução a temer é quando dispomos de grande quantidade de registros. Deverá dispor de um tempo inicial alto e talvez deva pensar em particionar suas tabelas horizontalmente para obter excelentes resultados.

Oscar Zárate é formado em Administração de Empresas e Análise de Sistemas. Trabalha como desenvolvedor desde 1987, passando pelas primeiras versões de FoxBase e Clipper até as atuais versões de Visual FoxPro, como também tem trabalhado com Visual Basic, ASP, XML, SQL Server entre outras ferramentas. Atualmente trabalha como líder de projetos na empresa Nosis SA da Argentina. Pode-se contatá-lo em [email protected].

Faça o download deste documento:

Usando Full Text Index

formato Word, 105 KB

Inicio da pagina

Termos de Uso | Marcas Comerciais | Política de Privacidade |

Comentários