Add unaccent postgresql function in search engine.
This commit is contained in:
@@ -22,7 +22,7 @@ public class PostSearchRepositoryImpl implements PostSearchRepository {
|
||||
|
||||
final String queryStr = buildSearchQuery(pCriterias);
|
||||
try {
|
||||
final Query query = em.createQuery(queryStr);
|
||||
final Query query = em.createNativeQuery(queryStr, Post.class);
|
||||
for(int i = 1 ; i <= pCriterias.length ; i++) {
|
||||
query.setParameter(StringUtils.concat("c", i), StringUtils.concat('%', pCriterias[i - 1].toLowerCase(), '%'));
|
||||
}
|
||||
@@ -35,15 +35,15 @@ public class PostSearchRepositoryImpl implements PostSearchRepository {
|
||||
}
|
||||
|
||||
protected String buildSearchQuery(final String[] pCriterias) {
|
||||
final StringBuilder result = new StringBuilder("SELECT p FROM Post p JOIN FETCH p.category JOIN FETCH p.author ");
|
||||
final StringBuilder result = new StringBuilder("SELECT * FROM post p INNER JOIN category c ON c.id = category_id INNER JOIN \"user\" u ON u.id = p.creator_id ");
|
||||
|
||||
for(int i = 1 ; i <= pCriterias.length ; i++) {
|
||||
result.append(StringUtils.concat((i == 1) ? "WHERE" : "OR", " LOWER(p.title) LIKE :c", i,
|
||||
" OR LOWER(p.description) LIKE :c", i,
|
||||
" OR LOWER(p.text) LIKE :c", i,
|
||||
" OR LOWER(p.category.name) LIKE :c", i,
|
||||
" OR LOWER(p.author.name) LIKE :c", i,
|
||||
" OR LOWER(p.author.email) LIKE :c", i, " "));
|
||||
result.append(StringUtils.concat((i == 1) ? "WHERE" : "OR", " UNACCENT(p.title) ILIKE UNACCENT(:c", i, ")",
|
||||
" OR UNACCENT(p.description) ILIKE UNACCENT(:c", i, ")",
|
||||
" OR UNACCENT(p.text) ILIKE UNACCENT(:c", i, ")",
|
||||
" OR UNACCENT(c.name) ILIKE UNACCENT(:c", i, ")",
|
||||
" OR UNACCENT(u.name) ILIKE UNACCENT(:c", i, ")",
|
||||
" OR UNACCENT(u.email) ILIKE UNACCENT(:c", i, ") "));
|
||||
}
|
||||
|
||||
return result.toString();
|
||||
|
||||
Reference in New Issue
Block a user