From fc15b504ba99a976b9aac12a398477d8280be7ef Mon Sep 17 00:00:00 2001 From: Florian Date: Sun, 7 Oct 2018 20:55:40 +0200 Subject: [PATCH] Correction of search engine pertinence --- .../java/org/codiki/posts/PostService.java | 58 +++++++++++-------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/codiki/posts/PostService.java b/src/main/java/org/codiki/posts/PostService.java index 4fd6bcd..4abe94e 100755 --- a/src/main/java/org/codiki/posts/PostService.java +++ b/src/main/java/org/codiki/posts/PostService.java @@ -25,17 +25,17 @@ import org.springframework.stereotype.Service; @Service public class PostService { - private static final int SCORE_TITLE = 50; + static final int SCORE_TITLE = 50; - private static final int SCORE_DESCRIPTION = 5; + static final int SCORE_DESCRIPTION = 5; - private static final int SCORE_TEXT = 1; + static final int SCORE_TEXT = 1; - private static final int SCORE_CATEGORY = 30; + static final int SCORE_CATEGORY = 30; - private static final int SCORE_AUTHOR_NAME = 40; + static final int SCORE_AUTHOR_NAME = 40; - private static final int SCORE_AUTHOR_EMAIL = 40; + static final int SCORE_AUTHOR_EMAIL = 40; @Autowired private PostRepository postRepository; @@ -122,52 +122,60 @@ public class PostService { calculateScore(e, criteriasArray); listSearchEntities.add(e); }); - Collections.sort(listSearchEntities, (e1, e2) -> e1.getScore() - e2.getScore()); + Collections.sort(listSearchEntities, (e1, e2) -> e2.getScore() - e1.getScore()); return listSearchEntities.stream().map(SearchEntity::getPost).map(PostDTO::new).collect(Collectors.toList()); } void calculateScore(final SearchEntity searchPost, final String[] pCriteriasArray) { for(final String criteria : pCriteriasArray) { - calculateScoreForTitle(searchPost, criteria); - calculateScoreForDescription(searchPost, criteria); - calculateScoreForText(searchPost, criteria); - calculateScoreForCategory(searchPost, criteria); - calculateScoreForAuthorName(searchPost, criteria); - calculateScoreForAuthorEmail(searchPost, criteria); + String formattedCriteria = formatForComp(criteria); + + calculateScoreForTitle(searchPost, formattedCriteria); + calculateScoreForDescription(searchPost, formattedCriteria); + calculateScoreForText(searchPost, formattedCriteria); + calculateScoreForCategory(searchPost, formattedCriteria); + calculateScoreForAuthorName(searchPost, formattedCriteria); + calculateScoreForAuthorEmail(searchPost, formattedCriteria); } } - private void calculateScoreForTitle(final SearchEntity pSearchPost, final String pCriteria) { - if(pSearchPost.getPost().getTitle().contains(pCriteria)) { + String formatForComp(final String pElem) { + return StringUtils.stripAccents(pElem.toLowerCase()); + } + + void calculateScoreForTitle(final SearchEntity pSearchPost, final String pCriteria) { + if(formatForComp(pSearchPost.getPost().getTitle()).contains(pCriteria)) { pSearchPost.increaseScore(SCORE_TITLE); } } - private void calculateScoreForDescription(final SearchEntity pSearchPost, final String pCriteria) { - final int criteriaOccurence = StringUtils.countMatches(pSearchPost.getPost().getDescription(), pCriteria); + void calculateScoreForDescription(final SearchEntity pSearchPost, final String pCriteria) { + final int criteriaOccurence = StringUtils.countMatches(formatForComp(pSearchPost.getPost().getDescription()), + pCriteria); pSearchPost.increaseScore(criteriaOccurence * SCORE_DESCRIPTION); } - private void calculateScoreForText(final SearchEntity pSearchPost, final String pCriteria) { - final int criteriaOccurence = StringUtils.countMatches(pSearchPost.getPost().getText(), pCriteria); + void calculateScoreForText(final SearchEntity pSearchPost, final String pCriteria) { + final int criteriaOccurence = StringUtils.countMatches(formatForComp(pSearchPost.getPost().getText()), + pCriteria); pSearchPost.increaseScore(criteriaOccurence * SCORE_TEXT); } - private void calculateScoreForCategory(final SearchEntity pSearchPost, final String pCriteria) { - if(pSearchPost.getPost().getCategory().getName().contains(pCriteria)) { + void calculateScoreForCategory(final SearchEntity pSearchPost, final String pCriteria) { + if(formatForComp(pSearchPost.getPost().getCategory().getName()).contains(pCriteria)) { pSearchPost.increaseScore(SCORE_CATEGORY); } } - private void calculateScoreForAuthorName(final SearchEntity pSearchPost, final String pCriteria) { - if(pSearchPost.getPost().getAuthor().getName().contains(pCriteria)) { + void calculateScoreForAuthorName(final SearchEntity pSearchPost, final String pCriteria) { + if(formatForComp(pSearchPost.getPost().getAuthor().getName()).contains(pCriteria)) { pSearchPost.increaseScore(SCORE_AUTHOR_NAME); } } - private void calculateScoreForAuthorEmail(final SearchEntity pSearchPost, final String pCriteria) { - if(pSearchPost.getPost().getAuthor().getEmail().contains(pCriteria)) { + void calculateScoreForAuthorEmail(final SearchEntity pSearchPost, final String pCriteria) { + if(formatForComp(pSearchPost.getPost().getAuthor().getEmail()).contains(pCriteria)) { pSearchPost.increaseScore(SCORE_AUTHOR_EMAIL); } }