Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

루씬(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);
      }
 Sample sentence : "My Friends Tigger & Pooh, 2007-2010. 내 친구 티거와 곰돌이 푸우"

my
friends
tigger
pooh

친구
티거와
곰돌이
푸우

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

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

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

    • wildcard로 like 검색 대체 가능

 Sample sentence : "My Friends Tigger Pooh, 2007-2010. 내 친구 티거와 곰돌이 푸우"

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 : 소문자로 통일 

 Sample sentence : "My Friends Tigger & Pooh, 2007-2010. 내 친구 티거와 곰돌이 푸우"

my
friends
tigger
&
pooh
2007-2010.

친구
티거와
곰돌이
푸우

simpleCode

  • SimpleCodeAnalyzer

    • SimpleCodeTokenizer

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

 Sample sentence : "My Friends Tigger & Pooh, 2007-2010. 내 친구 티거와 곰돌이 푸우"

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

whitespace

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

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

    • @Override
      protected boolean isTokenChar(int c) {
        return !Character.isWhitespace(c);
      }
 Sample sentence : "My Friends Tigger & Pooh, 2007-2010. 내 친구 티거와 곰돌이 푸우"

My
Friends
Tigger
&
Pooh,
2007-2010.

친구
티거와
곰돌이
푸우

standard

  • StandardAnalyzer : lucene-core에 포함된 analyzer로 유니코드 텍스트 분할 알고리즘을 사용하여 텍스트를 단어 경계에서 단어로 나눈다. 대부분의 구두점제거, 소문자화, 불용어 제거.

    • StandardTokenizer

    • StandardTokenFilter

    • LowerCaseTokenFilter

    • StopTokenFilter

 Sample sentence : "My Friends Tigger & Pooh, 2007-2010. 내 친구 티거와 곰돌이 푸우"

my
friends
tigger
pooh
2007
2010

친구
티거와
곰돌이
푸우

cjk

  • CJK (중국어, 일본어 및 한국어)

  • NoStopCJKAnalyzer : StandardTokenizer로 텍스트를 토큰 화하고, CJKWidthFilter로 콘텐츠를 정규화하고, LowerCaseFilter로 대소 문자를 접고, CJKBigramFilter로 CJK의 bigrams를 형성.

    • StandardTokenizer

    • CJKWidthFilter

    • LowerCaseFilter

    • CJKBigramFilter

 Sample sentence : "My Friends Tigger & Pooh, 2007-2010. 내 친구 티거와 곰돌이 푸우"

my
friends
tigger
pooh
2007
2010

친구
티거
거와
곰돌
돌이
푸우

PropertyType의 default analyzer 기준

propertyType

value

default analyzer

idable

true

simpleCode

labelable

true

cjk

valueType

CODE

CODES

REFERENCES

PARTS

simpleCode

TEXT

standard

others

simple

  • No labels