Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

검색시 boolean mode로 변경 #926

Open
wants to merge 3 commits into
base: dev/be
Choose a base branch
from

Conversation

HoeSeong123
Copy link
Contributor

@HoeSeong123 HoeSeong123 commented Nov 20, 2024

⚡️ 관련 이슈

close #899

📍주요 변경 사항

  • 2글자 키워드를 검색할 때 like 절을 사용하는 로직을 제거하였습니다.
    • ngram을 사용하면 2글자 검색도 가능하기 때문입니다.
  • ngram parser를 이용한 검색을 할 때 natural language mode에서 boolean 모드로 변경하였습니다.
  • 이전에 설명드린 쌍따옴표(")를 사용하지 않아도 단어를 통째로 포함한 키워드 검색이 가능합니다.
    • 이에 대한 실험 내용은 여기에 적어두었습니다. 궁금하신 분들은 한번씩 읽어봐주세요.
  • 시간이 없는 분들을 위해 요약하자면 다음과 같습니다.
    • boolean mode를 사용하면 키워드 통째로 검색이 가능합니다. 즉 리스트를 검색하면 테스트가 검색되지 않습니다. 마찬가지로 리스 스트 이런 것도 검색이 안되겠죠.
    • 검색 키워드에 띄어쓰기가 있으면 or 연산이 됩니다.
      • 돼지 고기 라고 검색하면 돼지고기로 검색이 진행되는데, 두 키워드 중 하나만 포함되도 검색 결과에 반환됩니다.
      • 소고기, 돼지꿀꿀 등등이 반환된다는 이야기입니다.
    • 이를 해결하기 위해 띄어쓰기를 기준으로 나누고 앞에 + 연산자를 붙여주어 키워드를 파싱해주었습니다.
      • 이렇게 하면 각 단어들이 and 연산으로 검색이 진행됩니다. 하지만 순서는 보장이 되지 않아요.
      • 돼지 고기 라고 검색하면 고기 돼지도 검색이 되긴 합니다.

🎸기타

  • 여전히 영어에 대해서는 불안정합니다.
    • list, test 등에 대해서는 i에 불용어가 적용이 돼서 st로만 검색이 되고, list, test 전부 검색됩니다.
    • 하지만 우리 테스트는 한글 기반이라는 점과 list, test처럼 짧은 영단어를 검색할 일은 많지 않을 것이라고 생각됩니다.
    • 조금 긴 단어가 되면 그 단어를 통째로 포함해야 검색됩니다.
      • ex) parameterizedTest를 검색시 list, test 등이 검색되지 않음.
    • 따라서 영단어에 대해서는 추후에 엘라스틱 서치를 도입하면서 해결해도 괜찮을 것 같다고 판단했습니다.

🍗 PR 첫 리뷰 마감 기한

11/29 23:59

@HoeSeong123 HoeSeong123 added refactor 요구사항이 바뀌지 않은 변경사항 BE 백엔드 labels Nov 20, 2024
@HoeSeong123 HoeSeong123 added this to the 7차 스프린트 💭 milestone Nov 20, 2024
@HoeSeong123 HoeSeong123 self-assigned this Nov 20, 2024
@HoeSeong123 HoeSeong123 changed the title Refactor/899 using boolean mode 검색시 boolean mode로 변경 Nov 20, 2024
Copy link
Contributor

@jminkkk jminkkk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고했어요 초롱! 덕분에 사용자 경험이 더 개선될 것 같아요 👍

그리고 형태소 분석 관련해서.. 이번에 찾아보니 MySQL도 형태소 분석을 제공하더라구요!
Mecab 플러그인에 한글 사전을 등록하면 되는 것 같은데 아마 기본적인 언어들은 등록되어있을 것 같기도 해요! (자주 사용되는 사전이 마지막으로 업데이트 된 게 2018년이라 걸리긴 하지만요.)

레퍼런스는 부족하지만 엘라스틱 서치와 비교해보면서 이것도 우리 한번 같이 알아보면 좋을 것 같아요!

이번 작업 너무 수고하셨습니다 👍👍

Comment on lines +38 to +44
StringBuilder keywordBuilder = new StringBuilder();
for(String keyword : parsedKeywords) {
keywordBuilder.append("+");
keywordBuilder.append(keyword);
keywordBuilder.append(" ");
}
return keywordBuilder.toString();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
StringBuilder keywordBuilder = new StringBuilder();
for(String keyword : parsedKeywords) {
keywordBuilder.append("+");
keywordBuilder.append(keyword);
keywordBuilder.append(" ");
}
return keywordBuilder.toString();
return Arrays.stream(parsedKeywords)
.map(keyword -> "+" + keyword)
.collect(Collectors.joining(" "));

요렇게 개선해볼 수도 있겠네요 ㅎㅎ
상수 추출도 해볼 수 있을 것 같아요!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드 refactor 요구사항이 바뀌지 않은 변경사항
Projects
Status: Todo
Development

Successfully merging this pull request may close these issues.

2 participants