Usuário com melhor resposta
Numeros em FTS

Pergunta
-
Boa tarde senhores.
Alguem poderia me ajudar com FTS?
Por que o comando CONTAINSTABLE retorna algumas linhas quando coloco algo do tipo :
INNER JOIN
CONTAINSTABLE(dbo.tabela, (nome), '"*manoel*"')Mas nao retorna nada se eu colocar:
INNER JOIN
CONTAINSTABLE(dbo.tabela, (nome), '"*manoel 4*"')Mesmo tendo um texto com "manoel 4" ????
Respostas
-
CeiltonLM,
Por padrão o FTS a busca precisa das informações, e não busca aproximada, o que pode estar acontecendo é que o seu catálogo esteja desatualizado, sendo assim, tente fazer a atualização do Catálogo.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Sugerido como Resposta Heloisa Pires segunda-feira, 4 de junho de 2012 14:25
- Marcado como Resposta Heloisa Pires sexta-feira, 8 de junho de 2012 14:51
-
CEilton,
Já tinha visto o seu post, mas estava aguardando um momento de folga para pesquisar.... A resposta rápida para o seu caso é que estamos falando de Full TEXT Search... Isso significa, buscas de texto, linguistica, e não de números.. Por isso o seu FTS não fará nenhuma distinção entre Manoel 2 e/ou Manoel 4. Isso não significa que o FTS não pode pesquisar pelos números nos índices FTS existentes.. Mas, minha opinião é que será um desperdicio de busca, já que por exemplo, ele pesquisará 2 em um campo que tem full text, e trará manoel 2, Antonio 2, pedro 2, Rua das Flores, número 2, por exemplo..
O Books Online no tópico CONTAINS (Transact-SQL) informa que os predicados e funções do FTS farão buscas contendo "tipos de dados de caractere" (character-based data types) para buscas precisas ou menos precisas em palavras ou frases.
Também relacionado a sua construção, você foi bem correto em dizer que o * era desnecessário, mas não errado, já que o uso do * no FTS indica uma, duas ou mais letras na sua consulta, desde que estejam entre aspas duplas. A busca '"*manoel*"' poderia retornar Emanoel, Manuel, Manuela, Manoela, Emanoela (somente exemplos)... Já se você fizesse a pesquisa 'Manoel*' (sem as aspas duplas), a sua busca seria apenas pelo termo fixo Manoel* (com o asterisco, assim mesmo como você está vendo. TAlvez se você fizer uma pesquisa 'Manoel 2' fique mais adequado à sua necessidade.. Faça alguns testes e nos informe os resultados..
Espero ter ajudado.
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
- Editado Roberto F FonsecaModerator segunda-feira, 21 de maio de 2012 02:15
- Sugerido como Resposta Heloisa Pires segunda-feira, 4 de junho de 2012 14:25
- Marcado como Resposta Heloisa Pires sexta-feira, 8 de junho de 2012 14:51
Todas as Respostas
-
Ceilton,
Por quê você esta utilizando o símbolo de asterisco em conjunto com a palavra Manoel 4?
A função ContainsTable, retorna uma tabela de zero, uma ou mais linhas para as colunas que contêm tipos de dados baseados em caracteres para obter correspondências precisas ou difusas (menos precisas) para palavras e frases únicas, a proximidade entre as palavras dentro de uma certa distância um do outro, ou correspondências ponderadas.
Consultas que usam CONTAINSTABLE especificam consultas de texto completo do tipo contém que retornam uma classificação de relevância (RANK) valor e chave de texto completo (KEY) para cada linha. A função CONTAINSTABLE usa as mesmas condições de pesquisa como o predicado CONTAINS contains.Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Boa noite Junior.Verdade, o * é desnecessario.
Mas o FTS continua desconsiderando os numeros.
Exemplo: se eu tenho como clientes "manoel 1"; "manoel 2"; "manoel 3"; "manoel 4"; "manoel 5";
Tanto faz se eu colocar
CONTAINSTABLE
(dbo.CLIENTE, (nome), '"manoel 2"') AS KEY_TBLou
CONTAINSTABLE
(dbo.CLIENTE, (nome), '"manoel"') AS KEY_TBL
em ambos os casos virao todas as linhas com manoelPor que o FTS ignora numeros?????
-
-
CeiltonLM,
Por padrão o FTS a busca precisa das informações, e não busca aproximada, o que pode estar acontecendo é que o seu catálogo esteja desatualizado, sendo assim, tente fazer a atualização do Catálogo.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Sugerido como Resposta Heloisa Pires segunda-feira, 4 de junho de 2012 14:25
- Marcado como Resposta Heloisa Pires sexta-feira, 8 de junho de 2012 14:51
-
CEilton,
Já tinha visto o seu post, mas estava aguardando um momento de folga para pesquisar.... A resposta rápida para o seu caso é que estamos falando de Full TEXT Search... Isso significa, buscas de texto, linguistica, e não de números.. Por isso o seu FTS não fará nenhuma distinção entre Manoel 2 e/ou Manoel 4. Isso não significa que o FTS não pode pesquisar pelos números nos índices FTS existentes.. Mas, minha opinião é que será um desperdicio de busca, já que por exemplo, ele pesquisará 2 em um campo que tem full text, e trará manoel 2, Antonio 2, pedro 2, Rua das Flores, número 2, por exemplo..
O Books Online no tópico CONTAINS (Transact-SQL) informa que os predicados e funções do FTS farão buscas contendo "tipos de dados de caractere" (character-based data types) para buscas precisas ou menos precisas em palavras ou frases.
Também relacionado a sua construção, você foi bem correto em dizer que o * era desnecessário, mas não errado, já que o uso do * no FTS indica uma, duas ou mais letras na sua consulta, desde que estejam entre aspas duplas. A busca '"*manoel*"' poderia retornar Emanoel, Manuel, Manuela, Manoela, Emanoela (somente exemplos)... Já se você fizesse a pesquisa 'Manoel*' (sem as aspas duplas), a sua busca seria apenas pelo termo fixo Manoel* (com o asterisco, assim mesmo como você está vendo. TAlvez se você fizer uma pesquisa 'Manoel 2' fique mais adequado à sua necessidade.. Faça alguns testes e nos informe os resultados..
Espero ter ajudado.
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
- Editado Roberto F FonsecaModerator segunda-feira, 21 de maio de 2012 02:15
- Sugerido como Resposta Heloisa Pires segunda-feira, 4 de junho de 2012 14:25
- Marcado como Resposta Heloisa Pires sexta-feira, 8 de junho de 2012 14:51
-