Correction of search engine pertinence
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user