Pois é, o problema é que o componente deles esbarra no problema citado por mim quando abri o tópico, infelizmente. Senão, seria perfeito.
Nunca usei o autocomplete do jQuery via Ajax, mas creio que ele vá exibir os resultados que forem retornados do seu servidor, ele não vai obrigar que esteja na ordem a menos que você obrigue isso na sua query
No caso o que você precisaria era de um full text search ao invés de usar LIKE na query, por exemplo, no MySQL seria WHERE MATCH(nome) AGAINST (’+south +africa’ IN BOOLEAN MODE) no caso de obrigar as 2 palavras estarem presentes. Vê como é no seu banco e se preciso teria que usar software separado tipo o Lucene
caiodorn
Se eu pesquisasse por “africa south”, o teu exemplo retornaria as sugestões? Eu preciso que a sugestão seja dada ao usuário independemente da ordem das palavras. Sou novato em programação (como talvez tenha percebido), se tu me disser que é possível modificar o algoritmo de modo a atender meu requisito eu darei uma olhada mais a fundo nisso.
Abraço.
caiodorn
Não estou certo que o resultado é mero resultado de uma query, mas vou ver. Vlw.
victorcosta
Quando você diz feito via AJAX você quis dizer que é obrigatório que ele vá no servidor buscar os resultados? Tipo porque tem 1 milhão de registros e seria inviável passar eles todos para o autocomplete. É porque o significado de AJAX é isso, fazer requisição assíncrona pro servidor, mas não sei se você quis dizer isso ou se passando tudo de uma vez e fazendo a filtragem no browser tá OK pra você, talvez consigo desenrolar dessa última forma também
caiodorn
É o seguinte: o resultado de algo do tipo SELECT * FROM é armazenado em buffer em um servidor. Novas consultas são realizadas pelo servidor a cada nova inserção no BD. Os clientes consultarão do buffer, sem SQL envolvido - a parte de banco é com o server. Eu preciso que esse campo de busca me dê sugestões a partir de uma ou mais keywords, não importando a ordem das palavras digitadas pelo usuário. Se eu digitar “Porto Alegre” ou “alegre porto”, a sugestão deverá ser idêntica.
Hebert_Coelho
caiodorn:
É o seguinte: o resultado de algo do tipo SELECT * FROM é armazenado em buffer em um servidor. Novas consultas são realizadas pelo servidor a cada nova inserção no BD. Os clientes consultarão do buffer, sem SQL envolvido - a parte de banco é com o server. Eu preciso que esse campo de busca me dê sugestões a partir de uma ou mais keywords, não importando a ordem das palavras digitadas pelo usuário. Se eu digitar “Porto Alegre” ou “alegre porto”, a sugestão deverá ser idêntica.
No método que o JQuery chamar, você não poderia implementar essa lógica em java não?
victorcosta
Fiz um teste aqui, com o autocomplete totalmente no browser e seguindo o comportamento que você quer. O que ele exibe depende puramente do que a query retorna (no meu caso, do código Javascript). Segue o exemplo:
<!DOCTYPE html><html><head><title>AutoComplete</title><metahttp-equiv="content-type"content="text/html; charset=ISO-8859-1"/><linkmedia="screen"rel="stylesheet"type="text/css"href="jquery-ui-1.8.21.custom.css"/><scripttype="text/javascript"src="jquery-1.7.2.min.js"></script><scripttype="text/javascript"src="jquery-ui-1.8.21.custom.min.js"></script></head><body><inputtype="text"id="search"name="search"/><scripttype="text/javascript">varcidades=['Porto Alegre','Porto Velho','Recife','São Paulo','Rio de Janeiro'];$(document).ready(function(){$('#search').autocomplete({delay:0,source:function(request,response){vartokens=$.trim(request.term).split(/\s+/);response($.grep(cidades,function(cidade){varmatch=true;$.each(tokens,function(i,token){if(!cidade.match(newRegExp('.*'+token+'.*','i')))match=false;});returnmatch;}));}});});</script></body></html>
caiodorn
Obrigado pela prestatividade, não esperava por isso. Resolveu em parte o problema… vou tentar modificar.
Digamos que eu digite “Alegre Porto São”, vê o que acontece heheh.
Abraço.
victorcosta
Eu fiz com que fosse obrigatório ter todas as palavras. Não tem nenhuma cidade que tem as três palavras “Alegre Porto São” por isso aparece nenhum
O código pra aceitar contanto que qualquer palavra exista é esse
var match = false;
$.each(tokens, function(i, token) {
if (cidade.match(new RegExp('.*' + token + '.*', 'i'))) match = true;
});
return match;
P
pbnf
O que vc precisa é busca fonética, apenas isso !
caiodorn
Exatamente! Muito obrigado, cara… agora a gente se descabela pra casar essa função com nossa fonte de dados hehe
Abraço.
caiodorn
Pois é, um colega já passou por aqui e falou isso hehe como estou iniciando, não me diz muita coisa.