Add unaccent postgresql function in search engine.

This commit is contained in:
2018-05-20 23:54:31 +02:00
parent 5b02caf83b
commit f55c6aa23b
2 changed files with 14 additions and 8 deletions

View File

@@ -64,6 +64,12 @@
<artifactId>commons-lang</artifactId> <artifactId>commons-lang</artifactId>
<version>2.3</version> <version>2.3</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@@ -22,7 +22,7 @@ public class PostSearchRepositoryImpl implements PostSearchRepository {
final String queryStr = buildSearchQuery(pCriterias); final String queryStr = buildSearchQuery(pCriterias);
try { try {
final Query query = em.createQuery(queryStr); final Query query = em.createNativeQuery(queryStr, Post.class);
for(int i = 1 ; i <= pCriterias.length ; i++) { for(int i = 1 ; i <= pCriterias.length ; i++) {
query.setParameter(StringUtils.concat("c", i), StringUtils.concat('%', pCriterias[i - 1].toLowerCase(), '%')); 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) { 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++) { for(int i = 1 ; i <= pCriterias.length ; i++) {
result.append(StringUtils.concat((i == 1) ? "WHERE" : "OR", " LOWER(p.title) LIKE :c", i, result.append(StringUtils.concat((i == 1) ? "WHERE" : "OR", " UNACCENT(p.title) ILIKE UNACCENT(:c", i, ")",
" OR LOWER(p.description) LIKE :c", i, " OR UNACCENT(p.description) ILIKE UNACCENT(:c", i, ")",
" OR LOWER(p.text) LIKE :c", i, " OR UNACCENT(p.text) ILIKE UNACCENT(:c", i, ")",
" OR LOWER(p.category.name) LIKE :c", i, " OR UNACCENT(c.name) ILIKE UNACCENT(:c", i, ")",
" OR LOWER(p.author.name) LIKE :c", i, " OR UNACCENT(u.name) ILIKE UNACCENT(:c", i, ")",
" OR LOWER(p.author.email) LIKE :c", i, " ")); " OR UNACCENT(u.email) ILIKE UNACCENT(:c", i, ") "));
} }
return result.toString(); return result.toString();