|
|
|
||||||||||||||||||||||
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Parceiros - CSS para Web Design - S.O.S Designers - Slackware-Brasil - Crie seu Web site - Oficina da Net |
Introdução a freetext e contains em SQL-ServerO que são e como é a sintaxe, para construir catálogos de dados em SQL-Server. FULL TEXT SEARCH
Utiliza-se em campos de texto de grande tamanho utilizando uns índices denominados catálogos. Estes catálogos só se podem utilizar com tabelas que contenham que definidas chaves primárias e armazenam todas as palavras do conteúdo das tabelas com execeção dos artigos, preposições, etc. Os catálogos não se atualizam automaticamente nem se salvam junto com o banco de dados e cada tabela pode ter um único catálogo. Para a utilização destes catálogos dentro de uma consulta, podemos utilizar dois métodos, o primeiro consiste em incluir os critérios dentro de uma cláusula WHERE (CONTAINS ou FREETEXT) e o segundo é utilizando uma tabela temporária que contém o ratio de acerto na consulta (CONTAINSTABLE ou FREETEXTTABLE). O predicado CONTAINS Utiliza-se este predicado para buscar um texto específico em uma tabela. Seu funcionamento é similar ao predicado LIKE, a diferença é que este não pode realizar buscas nos campos grandes de texto. CONTAINS não diferencia entre maiúsculas e minúsculas. Sintaxe: SELECT <Campos> FROM <Tabela> WHERE CONTAINS(<Campo>,<Cadeia>) OR/AND CONTAINS(<Campo>,<Cadeia>) O predicado CONTAINS suporta sintaxe complexas para buscar:
Para buscar uma palavra em um campo: SELECT title_id, title, notes FROM titles WHERE CONTAINS(notes,'business') Para localizar uma frase em um campo: SELECT title_id, titles, notes FROM titles WHERE CONTAINS(notes,' "common business applications" ') Para localizar uma frase em todos os campos habilitados: SELECT title_id, titles, notes FROM titles WHERE CONTAINS(*, ' "common business applications" ') Utilizando AND, OR e NOT SELECT title, notes FROM titles WHERE CONTAINS(notes, ' "favorite recipes" OR "gourmet recipes" ') SELECT titles, notes FROM titles WHERE CONTAINS(notes, ' cooking AND NOT ("computer*") ') SELECT titles, notes FROM titles WHERE CONTAINS(notes, ' beer AND ales ') SELECT titles, notes FROM titles WHERE CONTAINS(*, '("ice skating" OR hockey) AND NOT olympics') Utilizando caracteres curingas SELECT titles, notes FROM titles WHERE CONTAINS(notes,' "ice*" ') SELECT titles, notes FROM titles WHERE CONTAINS(notes, ' "light bread*" ') Busca de palavras ou frases indicando a importância das palavras: Esta busca permite indicar o peso que terá cada uma das palavras ou frases que se buscam sobre o resultado da busca, o peso oscila entre o valor mais baixo 0.0 e o valor mais alto 1.0. SELECT Cliente, Nome, Endereco FROM Cliente WHERE CONTAINS (Endereco, 'ISABOUT ( "Rua*", Velazquez WEIGHT(0.5), Serrano(0.9)') (Serão encontrados todos aqueles registros que no campo endereço exista a cadeia rua seguida de qualquer valor, ordenando primeiro os de "Rua Serrano", logo os de "Rua Velázquez" e depois o resto. Busca de palavras próximas: Podemos realizar buscas por duas palavras e indicar que se encontrem próximas uma da outra. A ordem das palavras não altera o resultado da busca. SELECT titulo, notas FROM livros WHERE CONTAINS (notas, "usuario NEAR computador") SELECT titulo, notas FROM livros WHERE CONTAINS (notas, "usuario ~ computador") Podem-se indicar três palavras, de tal forma que a segunda e a primeira devem estar próximas ao igual que a segunda e a terceira. SELECT titulo, notas FROM livros WHERE CONTAINS (notas, "usuario ~ principiante ~ computador") Buscas com frases: ... WHERE CONTAINS(Descricao, " salsas ~ "mezcl*" ") ... WHERE CONTAINS(Descricao, " "carne*" ~ "salsa empanada*" ") O predicado FREETEXT Ao utilizar este predicado se analisam todas as palavras das frases e nos devolve como resultado, aqueles registros que contém a frase completa ou algum fragmento da mesma. A sintaxe é igual que o predicado CONTAINS. ... FREETEXT(descricao, ' "Em um lugar da mancha de cujo nome não quero me lembrar" ') O predicado CONTAINSTABLE Este predicado tem igual funcionamento e sintaxe que CONTAINS a diferença que neste caso devolve uma tabela com duas colunas, a primeira chamada [KEY] contem o valor da chave primária da tabela que a que buscamos, a segunda chamada RANK devolve um valor indicando a porcentagem de acerto na busca para cada registro. SELECT Perguntas.Pergunta, Perguntas.Resposta, Resultado.RANK FROM Perguntas, CONTAINSTABLE(Resposta, " SQL Server") AS Resultado WHERE Perguntas.IdPergunta = Resultado.[KEY] ORDER BY Resultado.RANK Desc SELECT Perguntas.Pergunta, Perguntas.Resposta, Resultado.RANK FROM Perguntas INNER JOIN CONTAINSTABLE (Resposta, "SQL Server") AS Resultado ON Perguntas.IdPergunta = Resultados.KEY O predicado FREETEXTTABLE É o equivalente a CONTAINSTABLE porém realizando buscas de FREETEXT.
Autoria e outras referências sobre este artigo Dentro deste artigo: + 1 manual relacionado + 1 categoria relacionada + 1 Comentário sem rever
Manuais relacionados com este artigo Dentro de Tutorial de SQL Seguinte: Acesso ao banco de dados externos Anterior: Referências Cruzadas em SQL Categorias relacionadas Através das categorias do nosso diretório podem ser encontrados outros tipos de recursos relacionados com este artigo: + Entrar em Linguagem SQLComentário sem rever
|
| Sobre nós | Copyright | Anuncie | Entrar em contato | <criarweb> |