(Ajuda)Select criteria como a pesquisa do google ou tem como usar criteria + expressões regulares?

5 respostas
fabriciojf

pessoal é o seguinte,

to precisando implementar uma pesquisa em um blog que estou desenvolvendo igual akela do google onde o usuario digita um grupo de palavras (ex:jug grupo java)e o sistema retorna todas as páginas que contenham akele conjunto de palavras ou parte dele…

eu utilizo jpa + criteria e o máximo q consegui foi isso:

public static List<Produto> findProdutoByDescription(String termo) { Session session = (Session) em.getDelegate(); Criteria c = session.createCriteria(Produto.class); c.add( Restrictions.or ( Restrictions.like("descricao", termo, MatchMode.ANYWHERE).ignoreCase(), Restrictions.like("descricao", termo, MatchMode.ANYWHERE).ignoreCase() ) ); return c.list(); }

o problema é que o usuário pode digitar quantas palavras kiser e no codigo acima só consigo 2 por vez…
eu pesquisei aki e em vários foruns mas não encontrei nada semelhante…

5 Respostas

Regis_A_Rocha

desculpe talvez eu nao tenha conseguido entender sua duvida direito, mais si as palavras que o usuario digitar estiverem em um atributo,
compare esse atributo com os campos q vc quer q tenham aqueles descriçoes

por exemplo

fabriciojf

entaum…

o problema que os valores são todos para o mesmo atributo, como se fosse a asssim:

List<String> termos = ArrayList<String>(); termos.add("jug"); termos.add("grupo"); termos.add("java");

mais ou menos isso, só que o restriction não aceita list…

Regis_A_Rocha

public List<Produto> busca(String termo){ Criteria c = this.session.createCriteria(Produto.class); c.add(Restrictions.disjunction() .add(Restrictions.ilike("descricacao", termo, MathMode.ANYWHERE)) .add(Restrictions.ilike("titulo", termo,MathMode.ANYWHERE))); return c.list(); }

isso nao funcionaria

fabriciojf

naum naum,
olha só,

eu preciso passar N parâmetros para o mesmo campo, como se você digitasse no campo de pesquisa "termo1 termo2 termo3 termo4 termo5"
e sistema buscasse vários registros com o campo descrição contendo todos os valores ou parte deles… ex;

select * from pagina where descricao like '%termo1%' or descricao like '%termo2%' or descricao like '%termo3%' or descricao like '%termo4%' or descricao like '%termo5%'

sendo que no exemplo são 5 mas o usuário poderia digitar quantos quisesse…

fabriciojf

eu pensei em fazer isso com expressões regulares mas, será que tem como trabalhar com expressões regulares e critéria ou hql ou coisa do tipo?

[usuario][java] …

Criado 29 de setembro de 2009
Ultima resposta 29 de set. de 2009
Respostas 5
Participantes 2