none
Numeros em FTS RRS feed

  • 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" ????

     

    segunda-feira, 14 de maio de 2012 19:28

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
    sexta-feira, 18 de maio de 2012 17:32
  • 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


    sábado, 19 de maio de 2012 01:34
    Moderador

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]

    quarta-feira, 16 de maio de 2012 17:03

  • 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_TBL

    ou

    CONTAINSTABLE
    (dbo.CLIENTE, (nome), '"manoel"')  AS KEY_TBL


    em ambos os casos virao todas as linhas com manoel

    Por que o FTS ignora numeros?????

     

    quarta-feira, 16 de maio de 2012 23:05
  • Ideias?????
    sexta-feira, 18 de maio de 2012 00:15
  • 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
    sexta-feira, 18 de maio de 2012 17:32
  • 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


    sábado, 19 de maio de 2012 01:34
    Moderador
  • Roberto,

    Obrigado pela resposta.

    No momento estamos sem servidor. Pifou...

    Assim que eu tiver um BD farei um teste e darei o retorno.

    Obrigado a todos... 

    quarta-feira, 23 de maio de 2012 18:14