루씬(Lucene)
색인(index) 대량 문서에서 원하는 내용을 빠르게 검색하고자 할 때 원본 문서를 색인하고 검색하기 좋은 형태로 변환해 색인으로 만들어두는 처리 과정(indexing), 이 과정을 거친 결과물(index)
검색(searching) 색인에 들어있는 토큰을 기준으로 해당하는 토큰이 포함된 문서를 찾아내서 사용자 관점의 우선순위를 부여하는(ranking) 과정을 말함 |
---|
Analyzer는 Tokenizer와 TokenFitler로 구성된다.
Tokenizer : Text를 Token으로 분리
TokenFilter : 분리된 Token을 정제
AnalyzerType
src/test/java/net/ion/ice/services/AnalyzerTest.java
simple
SimpleAnalyzer
: lucene-analyzer-common에 존재하는 analyzer로 문자가 아닌것(기호/숫자)을 기준으로 나누고 소문자로 변경LowerCaseTokenizer
: 영문 분할용으로 대문자를 소문자로 바꿔서 분할하며, LetterTokenizer + LowerCaseFitler의 조합@Override protected int normalize(int c) { return Character.toLowerCase(c); }
code
CodeAnalyzer
CodeTokenizer
@Override protected boolean isTokenChar(int c) { return ! (Character.isWhitespace(c) || c == ',') ; }
LowerCaseFilter
: 소문자로 통일
simpleCode
SimpleCodeAnalyzer
SimpleCodeTokenizer
@Override protected boolean isTokenChar(int c) { return ! (c == ',') ; }
LowerCaseFilter
: 소문자로 통일
whitespace
WhitespaceAnalyzer
: lucene-analyzer-common에 존재하는 analyzer로 공백이나 탭등을 기준으로 tokenize를 수행WhitespaceTokenizer
: 공백 문자로 텍스트를 분할@Override protected boolean isTokenChar(int c) { return !Character.isWhitespace(c); }
standard
StandardAnalyzer
: lucene-core에 포함된 analyzer로 유니코드 텍스트 분할 알고리즘을 사용하여 텍스트를 단어 경계에서 단어로 나눈다. 대부분의 구두점제거, 소문자화, 불용어 제거.StandardTokenizer
StandardTokenFilter
LowerCaseTokenFilter
StopTokenFilter
cjk
CJK (중국어, 일본어 및 한국어)
NoStopCJKAnalyzer
: StandardTokenizer로 텍스트를 토큰 화하고, CJKWidthFilter로 콘텐츠를 정규화하고, LowerCaseFilter로 대소 문자를 접고, CJKBigramFilter로 CJK의 bigrams를 형성.StandardTokenizer
CJKWidthFilter
LowerCaseFilter
CJKBigramFilter
PropertyType의 default analyzer 기준
propertyType | value | default analyzer |
---|---|---|
idable |
|
|
labelable |
|
|
valueType | CODE CODES REFERENCES PARTS |
|
TEXT |
| |
others |
|