halfar 5 Denunciar post Postado Setembro 8, 2014 Tenho duas questões neste tópico, ambas as questões se relacionam a pesquisa de texto no banco de dados. 1 - A primeira questão: Estou tendo um problema na pesquisa com match e against. Eu tenho dois campos na tabela: TITULO e TEXTO Se eu executar o macth individualmente para cada um dos textos, funciona corretamente, assim: select * from novidades_tecnologia2 WHERE MATCH(titulo) AGAINST ('brasileiros') select * from novidades_tecnologia2 WHERE MATCH(texto) AGAINST ('desenvolvem') mas se eu juntar os dois campos numa única instrução, gera erro: select * from novidades_tecnologia2 WHERE MATCH(titulo, texto) AGAINST ('brasileiros', 'desenvolvem') O erro que ocorre é o seguinte: #1191 - Can't find FULLTEXT index matching the column list 2 - A outra questão é que gostaria de abordar, é que tanto utilizando o operador like ou against, ambos podem me retornar resultados, cujos resultados PODEM representar a metade da palavra especificada na busca. vamos ao exemplo: se no critério de busca eu especificar a palavra "brasil", ele considerará a palavra "brasileiro" e exibirá no resultado de buscas. Eu gostaria de uma busca específica, se pedi para buscar "brasil" quero somente textos que contenham a palavra "brasil", e não "brasileiro", embora a palavra "brasil" esteja contida dentro da palavra "brasileiro", este resultado não me interessa, neste tipo de pesquisa, pois quero deixar também a opção para o usuario pesquisar pela palavra exata. Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Setembro 8, 2014 1. Pelo índice ter funcionado com cada um dos campos entendo que a tabela é MyISAM, mas para funcionar em ambas as colunas, você deve criar um índice próprio para as duas colunas, e não um índice FT para cada coluna. 2. Basta utilizar "Brasil" (entre aspas). Dá uma olhada no item 12.9 inteiro. Compartilhar este post Link para o post Compartilhar em outros sites
halfar 5 Denunciar post Postado Setembro 8, 2014 ah...beleza funcionou a questão 1... somente a questão 2 ainda não funcionou, voce diz para colocar o BRASIL entre aspas, mas não deu certo, retorna o BRASILEIRO também mas este é um problema menor, que se não der certo, creio que não terá muito problema Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Setembro 8, 2014 Encontrei onde eu tinha lido sobre como priorizar as consultas utilizando o MATCH() AGAINST() Compartilhar este post Link para o post Compartilhar em outros sites
halfar 5 Denunciar post Postado Setembro 9, 2014 valew...agora funcionou... na realidade tinha funcionado, o mysql estava me induzindo a uma interpretação errada, ele informa que retornou resultado zero (e isto está correto), mas estava listando resultados de pesquisas anteriores... é um desses bugs de programacao que precisa ser melhorado bem, tive que retornar, me surgiu uma outra questão: como é que vou colocar uma variavel dentro de aspas? pois obviamente, vou capturar no formulario a palavra digitada e jogar em uma variável... Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Setembro 9, 2014 Para filtrar Strings, geralmente, eu filtro com aspas simples: WHERE campo = 'valor'. Então, se o valor for "Brasil", ficaria desta forma: WHERE campo = '"Brasil"'. Mas também você pode utilizar a contra barra (\) para informar ao MySQL que a aspas duplas deve ser interpretada como aspas duplas: WHERE campo = "\"Brasil\"". No PHP tema função ADDSLASHES() e também a função mysql_real_escape_string(), esta última, acho que funciona melhor por agir em conjunto com o MySQL. Se não utilizar o PHP, basta pesquisar por estas alternativas. Compartilhar este post Link para o post Compartilhar em outros sites