PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Implémenter un filtre de recherche pour toutes les colonnes

Vous devrez ajouter votre 'null guard' à la recherche en texte intégral et utiliser to_tsquery au lieu de plainto_tsquery (pour que la recherche de préfixe fonctionne).

SqlStatement = "SELECT * FROM ACCOUNT "
    + " WHERE (trim(?) = '') IS NOT FALSE"
    + " OR to_tsvector('english', USER_NAME || ' ' || FIRST_NAME || ' ' || LAST_NAME ) @@  to_tsquery(?)"
    + " ORDER BY user_name ASC offset ? limit ? ";

et ajoutez le searchString à votre PreparedStatement une seconde fois

 ps = conn.prepareStatement(sql);

 ps.setString(1, searchString);
 ps.setString(2, searchString);
 ps.setInt(3, firstRow);
 ps.setInt(4, rowCount);

Remarque en utilisant une recherche plein texte, vous ne pourrez pas rechercher des parties de mots (comme %user% , %name ou us%name ). Vous pouvez cependant rechercher des préfixes, par ex. user:*