Add unaccent postgresql function in search engine.
This commit is contained in:
6
pom.xml
6
pom.xml
@@ -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>
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user