analyzer

루씬(Lucene)

  • 고성능 정보 검색(IR*, Information retrieval) 라이브러리

  • 색인과 검색의 기능을 담당

 

색인(index)

대량 문서에서 원하는 내용을 빠르게 검색하고자 할 때 원본 문서를 색인하고 검색하기 좋은 형태로 변환해 색인으로 만들어두는 처리 과정(indexing), 이 과정을 거친 결과물(index)

 

  1. 텍스트 추출(Parser)

  2. 텍스트 분석(Analysis)

  3. 색인(Index)

    • 해당 단어가 어느 문서에 들어있는지 등을 자료구조로 만든다

 

검색(searching)

색인에 들어있는 토큰을 기준으로 해당하는 토큰이 포함된 문서를 찾아내서 사용자 관점의 우선순위를 부여하는(ranking) 과정을 말함

루씬(Lucene)

  • 고성능 정보 검색(IR*, Information retrieval) 라이브러리

  • 색인과 검색의 기능을 담당

 

색인(index)

대량 문서에서 원하는 내용을 빠르게 검색하고자 할 때 원본 문서를 색인하고 검색하기 좋은 형태로 변환해 색인으로 만들어두는 처리 과정(indexing), 이 과정을 거친 결과물(index)

 

  1. 텍스트 추출(Parser)

  2. 텍스트 분석(Analysis)

  3. 색인(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); }

my
friends
tigger
pooh

친구
티거와
곰돌이
푸우

  • simple은 예외로 tokenize된 word를 색인하지 않고 전체 문장을 통으로 인덱싱하고 있다.

    • 검색 시 tokenize된 단어로 matching으로 부분 검색을 할 수 없다.

    • 전체 문장이 매치되는 matching 검색 가능

    • wildcard로 like 검색 대체 가능

Search success {{protocol}}://{{hostname}}:{{port}}/node/testIndex?simple_matching=My Friends Tigger Pooh, 2007-2010. 내 친구 티거와 곰돌이 푸우

no data {{protocol}}://{{hostname}}:{{port}}/node/testIndex?simple_matching=Pooh

no data {{protocol}}://{{hostname}}:{{port}}/node/testIndex?simple_matching=pooh

Search success {{protocol}}://{{hostname}}:{{port}}/node/testIndex?simple_wildcard=Pooh

Search success {{protocol}}://{{hostname}}:{{port}}/node/testIndex?simple_wildcard=pooh

code

  • CodeAnalyzer

    • CodeTokenizer

    • @Override protected boolean isTokenChar(int c) { return ! (Character.isWhitespace(c) || c == ',') ; }
    • LowerCaseFilter : 소문자로 통일 

my
friends
tigger
&
pooh
2007-2010.

친구
티거와
곰돌이
푸우

simpleCode

  • SimpleCodeAnalyzer

    • SimpleCodeTokenizer

    • @Override protected boolean isTokenChar(int c) { return ! (c == ',') ; }
    • LowerCaseFilter : 소문자로 통일 

my friends tigger & pooh
2007-2010. 내 친구 티거와 곰돌이 푸우

whitespace

  • WhitespaceAnalyzer : lucene-analyzer-common에 존재하는 analyzer로 공백이나 탭등을 기준으로 tokenize를 수행

    • WhitespaceTokenizer : 공백 문자로 텍스트를 분할

My
Friends
Tigger
&
Pooh,
2007-2010.

친구
티거와
곰돌이
푸우

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

propertyType

value

default analyzer

idable

true

simpleCode

labelable

true

cjk

valueType

CODE

CODES

REFERENCES

PARTS

simpleCode

TEXT

standard

others

simple