Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

nakid.mkt

Busca com Freetext

Recommended Posts

Oi pessoal

 

Estou com um campo fulltext search chamado PalavrasChave, varchar(255), na minha tabela BuscaEspecial

 

Full-text Specification: yes

(Is Full-text indexed): yes

Full-text Type column: none (e não consigo alterar)

Language: English US (não tem português)

 

Exemplo: tenho uma linha cadastrada com nomes de frutas no campo PalavrasChave: abacate morango amora cereja.

Mas minha busca : SELECT * FROM BuscaEspecial WHERE Freetext(PalavrasChave,'morango') não traz nada.

 

Alguma configuração faltando? De for uma das quais eu não consigo alterar, alguém pode me ajudar a abrir essa possibilidade de configuração?

 

Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

De uma olhada neste artigo:

 

Full Text SQL2005

 

Abçs

 

 

Oi A.Jr,

 

Muito obrigado pela resposta. É de grande valia este artigo, mas estou procurando algo como ranquear a busca. Eu fazia isso no Mysql. Ele cava uma nota para os resultados e eu podia ordenar de acordo com esse valor. Considerando os campos:

 

id1 - frutas: morango abacaxi maça banana

id2 - frutas: morango abacaxi maça limão

 

Uma busca por: morango limão romã

 

traria o id2 melhor ranqueado que o id1 uma vez que ele tem 2 das frutas pesquisadas e o id1 apenas uma.

 

 

Não sei se esse tipo de busca consegue rankear buscas como: abacai (abacaxi escrito errado). Tipo a correção do google quando digitamos algo errado.

 

Muito obrigado

 

 

 

 

 

uma busca por:

Compartilhar este post


Link para o post
Compartilhar em outros sites

nakid,

eu, em particular, não me recordo de uma função para este tipo de "ranking". Lembro que vi isso em algum módulo do meu curso, mas como era uma coisa que não iria utilizar não anotei.

Vou ver se acho algo e lhe informo.

 

Para os tipos de correção que citou, tem a função SOUNDEX

 

Verifique se lhe ajuda!

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

nakid,

eu, em particular, não me recordo de uma função para este tipo de "ranking". Lembro que vi isso em algum módulo do meu curso, mas como era uma coisa que não iria utilizar não anotei.

Vou ver se acho algo e lhe informo.

 

Para os tipos de correção que citou, tem a função SOUNDEX

 

Verifique se lhe ajuda!

 

Abçs

 

Nossa! Obrigadão pela dica!!

 

Quanto ao Ranking, descobri umas funções que fazem algo do tipo. Dá uma olhada:

SELECT  
   TB.Campo1,
   TB.Campo2,
   Rel.RANK		
FROM Tabela AS TB
INNER JOIN  
FREETEXTTABLE(Tabela, CampoDaPesquisa, 'paravra1 palavra2 palavran') AS Rel  
ON  
Rel.[KEY]=PL.CampoIdDaTabela  
ORDER BY Rel.RANK DESC

 

É essa FREETEXTTABLE e a CONTAINSTABLE que trabalham isso.

 

Mas não sonsigo testar direito. Apesar dos meus campos serem fulltext, só os registros mais antigos funcionam. E mesmo se eu inserir mais palavras chave nos registros antigos, estas também não funcionam, apenas as cadastradas lá atrás. E raios! Isso não faz sentido algum! A única resposta é que meu DB deve estár atualizando seus indices fulltext de tempo em tempo. Enfim...

 

Obrigado.

Nakid

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei este link que pode lhe ajudar:

 

http://msdn.microsoft.com/pt-br/library/cc879244.aspx

 

Estou sem ambiente de teste neste momento.

 

Qual sua versão do SQL?

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei este link que pode lhe ajudar:

 

http://msdn.microsoft.com/pt-br/library/cc879244.aspx

 

Estou sem ambiente de teste neste momento.

 

Qual sua versão do SQL?

 

Abçs

 

Oi A.Jr, mais uma vez muito obrigado, excelente indicação. O problema que citei acima era aquele mesmo. Os meus index fulltext não estavam sendo atualizados. Eu falei com o responsavel pelas settings aqui e ele resolveu pra mim.

 

Cara, finalmente achei o resultado que eu esperava. É bem útil isso e que fique de consulta pra quem tiver a mesma necessidade Ficou assim:

 

 

SELECT
   TB.Campo1,
   TB.Campo2,
   TB.Campon,
   Rel.RANK
FROM 
   Tabela AS TB, ContainsTable(Tabela, CampoDaPesquisa, 
   'ISABOUT (palavrachave1 weight (.1), palavrachave2 weight (.3), palavrachave3 weight (.2))') Rel 
WHERE 
Rel.[KEY]=TB.CampoIdDaTabela
ORDER BY
RANK Desc	

 

Além de ele pontuar os resultados em que mais ocorreram as palavraschave, existe essa possibilidade opcional de atribuir pesos para palavras chave diferentes.

 

Agora só falta descobrir uma forma boa para aproximar palavras escritas de forma errada no meio disso tudo. Talvez seu link me ajude.

 

Abraço!

 

Nakid

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ficou realmente muito bom o que fez! :joia:

 

Tente ver se o Soundex não lhe ajuda no caso.

 

Abçs e boa sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.