Correction of search engine pertinence

This commit is contained in:
Florian
2018-10-07 20:55:40 +02:00
parent 8c31a85867
commit fc15b504ba

View File

@@ -25,17 +25,17 @@ import org.springframework.stereotype.Service;
@Service @Service
public class PostService { 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 @Autowired
private PostRepository postRepository; private PostRepository postRepository;
@@ -122,52 +122,60 @@ public class PostService {
calculateScore(e, criteriasArray); calculateScore(e, criteriasArray);
listSearchEntities.add(e); 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()); return listSearchEntities.stream().map(SearchEntity::getPost).map(PostDTO::new).collect(Collectors.toList());
} }
void calculateScore(final SearchEntity searchPost, final String[] pCriteriasArray) { void calculateScore(final SearchEntity searchPost, final String[] pCriteriasArray) {
for(final String criteria : pCriteriasArray) { for(final String criteria : pCriteriasArray) {
calculateScoreForTitle(searchPost, criteria); String formattedCriteria = formatForComp(criteria);
calculateScoreForDescription(searchPost, criteria);
calculateScoreForText(searchPost, criteria); calculateScoreForTitle(searchPost, formattedCriteria);
calculateScoreForCategory(searchPost, criteria); calculateScoreForDescription(searchPost, formattedCriteria);
calculateScoreForAuthorName(searchPost, criteria); calculateScoreForText(searchPost, formattedCriteria);
calculateScoreForAuthorEmail(searchPost, criteria); calculateScoreForCategory(searchPost, formattedCriteria);
calculateScoreForAuthorName(searchPost, formattedCriteria);
calculateScoreForAuthorEmail(searchPost, formattedCriteria);
} }
} }
private void calculateScoreForTitle(final SearchEntity pSearchPost, final String pCriteria) { String formatForComp(final String pElem) {
if(pSearchPost.getPost().getTitle().contains(pCriteria)) { return StringUtils.stripAccents(pElem.toLowerCase());
}
void calculateScoreForTitle(final SearchEntity pSearchPost, final String pCriteria) {
if(formatForComp(pSearchPost.getPost().getTitle()).contains(pCriteria)) {
pSearchPost.increaseScore(SCORE_TITLE); pSearchPost.increaseScore(SCORE_TITLE);
} }
} }
private void calculateScoreForDescription(final SearchEntity pSearchPost, final String pCriteria) { void calculateScoreForDescription(final SearchEntity pSearchPost, final String pCriteria) {
final int criteriaOccurence = StringUtils.countMatches(pSearchPost.getPost().getDescription(), pCriteria); final int criteriaOccurence = StringUtils.countMatches(formatForComp(pSearchPost.getPost().getDescription()),
pCriteria);
pSearchPost.increaseScore(criteriaOccurence * SCORE_DESCRIPTION); pSearchPost.increaseScore(criteriaOccurence * SCORE_DESCRIPTION);
} }
private void calculateScoreForText(final SearchEntity pSearchPost, final String pCriteria) { void calculateScoreForText(final SearchEntity pSearchPost, final String pCriteria) {
final int criteriaOccurence = StringUtils.countMatches(pSearchPost.getPost().getText(), pCriteria); final int criteriaOccurence = StringUtils.countMatches(formatForComp(pSearchPost.getPost().getText()),
pCriteria);
pSearchPost.increaseScore(criteriaOccurence * SCORE_TEXT); pSearchPost.increaseScore(criteriaOccurence * SCORE_TEXT);
} }
private void calculateScoreForCategory(final SearchEntity pSearchPost, final String pCriteria) { void calculateScoreForCategory(final SearchEntity pSearchPost, final String pCriteria) {
if(pSearchPost.getPost().getCategory().getName().contains(pCriteria)) { if(formatForComp(pSearchPost.getPost().getCategory().getName()).contains(pCriteria)) {
pSearchPost.increaseScore(SCORE_CATEGORY); pSearchPost.increaseScore(SCORE_CATEGORY);
} }
} }
private void calculateScoreForAuthorName(final SearchEntity pSearchPost, final String pCriteria) { void calculateScoreForAuthorName(final SearchEntity pSearchPost, final String pCriteria) {
if(pSearchPost.getPost().getAuthor().getName().contains(pCriteria)) { if(formatForComp(pSearchPost.getPost().getAuthor().getName()).contains(pCriteria)) {
pSearchPost.increaseScore(SCORE_AUTHOR_NAME); pSearchPost.increaseScore(SCORE_AUTHOR_NAME);
} }
} }
private void calculateScoreForAuthorEmail(final SearchEntity pSearchPost, final String pCriteria) { void calculateScoreForAuthorEmail(final SearchEntity pSearchPost, final String pCriteria) {
if(pSearchPost.getPost().getAuthor().getEmail().contains(pCriteria)) { if(formatForComp(pSearchPost.getPost().getAuthor().getEmail()).contains(pCriteria)) {
pSearchPost.increaseScore(SCORE_AUTHOR_EMAIL); pSearchPost.increaseScore(SCORE_AUTHOR_EMAIL);
} }
} }