일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Armeria
- hbase 저장공간 설정
- 노드간 통신
- fake jwt
- 월급루팡 일지
- save/update
- RedirectService
- 논블록킹 성능
- 개발 어렵당.ㅠ
- 7879
- UnsupportedOperationException
- Loki 로그
- ㅉ때
- R2DBC Paging
- 핀포인트
- OIDC
- 애자일 싫타
- pinpoint 2.5.3
- reids
- Ingress Controller Fake
- pinpoint
- jsonMarshaller
- LPOS
- 티스토리챌린지
- formik
- 오블완
- 플루터
- jar 배포
- intellij
- nGinder
- Today
- Total
대머리개발자
solr9 - 형태소 필터 변경 삽질.. 본문
결론은..웰메이든 된 제품을 있는 그대로 잘 활용하자 ㅋ
현재까지는 "서브 기능"으로만 이용 했기 때문에 정확도를 크게 신경 쓰지 않았다.
"주요 기능"으로 많이 사용한다 해서..
개선 해야지... 해야지. 했던 부분을 진행하려고 한다.
"고도화"를 검색했을 때 "고도 + 화" => (자동화, 선진화, 운동화, 화요일, 멀고도, 밝다고도,...)" ..깜놀!
일단 모든 단어들을 형태소 분석이 되지 않도록 사용자 사전에 추가해서 급한 불을 껏다.
###
일차적인 목표는
원본 Text가 그대로 나와야 된다고 생각한다.
그 이후 형태소로 나눠진 추가적인 결과 리스트가 나오면 덤인것이다.
하지만 지금처럼 전혀 기대 하지 못한 결과가 나와 버렸으니... 튜닝을 해보자! ㅠ
형태소를 분석해주는 친구들이 제법 있다.
https://koalanlp.github.io/sample/comparison
sample
KoalaNLP의 사용 샘플
koalanlp.github.io
solr9에서 기본적으로 적용된 형태 노리(nori)는 나쁜 녀석이 아니다.
너무 잘 되서 문제지..
삽질에 삽질을 거듭해서
커스텀 토크나이저를 바인딩 해봤는데..
문제가 많았다. ㅋ
Tokenizer을 상속해서 incrementToken()을 오버라이드 하면 된다.
"open korean text"를 이용해서 토큰화를 진행해봤다.
...
@Override
public boolean incrementToken() throws IOException {
clearAttributes();
if (tokens == null) {
StringBuilder buffer = new StringBuilder();
int available = input.read();
while (available != -1) {
buffer.append((char) available);
available = input.read();
}
if (buffer.length() == 0) {
return false; // 더 이상 입력이 없으면 false 반환
}
String text = removeHtmlTags(buffer.toString());
tokens = OpenKoreanTextProcessorJava.tokensToJavaKoreanTokenList(OpenKoreanTextProcessorJava.tokenize(text));
tokenIndex = 0;
}
if (tokenIndex < tokens.size()) {
KoreanTokenJava token = tokens.get(tokenIndex);
String tokenText = token.getText();
charTermAttr.append(tokenText);
charTermAttr.setLength(tokenText.length());
offsetAttr.setOffset(token.getOffset(), token.getOffset() + token.getLength());
posIncrAttr.setPositionIncrement(1);
tokenIndex++; // 다음 토큰으로 이동
return true;
}
return false; // 더 이상은 쥐쥐
}
..
첫 번째 문제는 큰 데이터 형태소 파싱(색인)이 느렸다.
두 번째 문제는 검색도 느렸다. -> 검색 엔진의 사용 이유가 없어졌다.
(물론.. 100% 내가 잘못 짠코드가 문제라고 보여지지만, 나에겐 시간이 없다..)
나의 결론은 헛 지거리 하지 말고 ㅠ
단순 text_ws 토큰나이저를 이용하자. 즉 공백 기준으로 색인 한자. 특수문자 제거하고
<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer name="whitespace"/>
<filter name="patternReplace" pattern="[^a-zA-Z0-9가-힣\s]" replacement="" replace="all"/>
<filter name="lowercase"/>
</analyzer>
</fieldType>
그래야.. 글자 그대로가 검색된다!!!
이제 "고도화"를 검색 했을 때 "..멀고도 험한..."은 검색되지 않는다. ㅠ
일부러 사용자 사전을 만들지 않아도 된다.. 글자 그대로 검색하니께..
형태소 분석이 필요하다면 복사 필드를 이용해서 쓰자!!!
<field name="content" type="text_ws" uninvertible="true" indexed="true" stored="true"/>
<field name="content_copy" type="text_ko" uninvertible="true" indexed="true" stored="true"/>
<copyField source="content" dest="content_copy"/>
## 기타...
벤치마킹을 해본 내용s
1. 티스토리 검색 기능을 통해 "아버지가" 를 검색
"아버지"를 검색하고 하이라이팅만 프론트에서 처리한 듯 하고
서머리 내용도 검색 결과가 있는 내용이 아니라 문조건 첫 문장인 듯 하다.
조금..안습이다.ㅠ..b
2. 네이버 블로그..Wow
UI/UX 드럽게 OLD...But 기능만큼은....명불허전
요약내용도 검색어 기준으로 보여주고. 하이라이팅 기능도.. ..오호
'개발이야기 > 오픈소스 설치' 카테고리의 다른 글
ingress nginx 버전 업데이트 (0) | 2025.03.31 |
---|---|
아르메리아(Armeria) 더더더 공부 해자. (2) | 2024.10.22 |
인그레스 콘트롤러 - cros 처리 (0) | 2024.06.25 |
armeria framework는 누가 모니터링 해줄 꺼니.ㅠ (0) | 2024.06.24 |
[solr9] 검색 품질...하악하악 (0) | 2024.03.21 |