我有一个问题,我有一个包含以下属性的表
pe_documento
pe_nombres (given names)
pe_apellido_p (father's surname)
pe_apellido_m (mother's surname)
我想从名称或文件编号的输入中搜索 我正在使用Primefaces和Hibernate以及数据库mysql 此搜索必须支持此类匹配:
在输入中:
Martín
结果:
Martin
martíN
在输入中:
Donofrio
结果:
D’onofrio
donofrio
在输入中:
Juan (pe_nombres) Perez (pe_apellido_p or pe_apellido_m)
结果:
Juan Antonio Mariscal Peres
Juan Ruperto Péres
作为临时解决方案,我做了以下几点。
StringTokenizer st = new StringTokenizer(posNombre);
List<String> busqueda = new ArrayList<String>();
while (st.hasMoreTokens()) { // este ciclo es para comprobar cuando
// se
// acaba de procesar tu cadena
String palabra = st.nextToken();// esto lee la palabra siguiente
// en
// la cadena
palabra = removeTildes(palabra);
// cadenaBD = cadenaBD.replaceAll(" ", "");
palabra = palabra.replaceAll("'", "");
palabra = palabra.replaceAll("-", "");
palabra = palabra.toLowerCase();
busqueda.add(palabra);
}
List<Postulante> postulanteDB = postulanteDao.listarPostulante();
listaCoincidenciasPostulantes = new ArrayList<Postulante>();
String cadenaBD;
for (Postulante p : postulanteDB) {
cadenaBD = p.getPersona().getPeNombres() + " "
+ p.getPersona().getPeApellidoP() + " "
+ p.getPersona().getPeApellidoM();
cadenaBD = removeTildes(cadenaBD);
cadenaBD = cadenaBD.replaceAll(" ", "");
cadenaBD = cadenaBD.replaceAll("'", "");
cadenaBD = cadenaBD.replaceAll("-", "");
cadenaBD = cadenaBD.toLowerCase();
int contador = 0;
int tamanio = busqueda.size();
for (String b : busqueda) {
if (p.getPersona().getPeDocumento().indexOf(b) != -1) {
listaCoincidenciasPostulantes.add(p);
break;
} else {
if (cadenaBD.indexOf(b) != -1) {
contador++;
if (tamanio == contador) {
listaCoincidenciasPostulantes.add(p);
break;
}
}
}
}
}
我想知道这次搜索是否是最佳的,谢谢。