검색 엔진인 Lucene을 정리 합니다.


Lucene 개요



Lucene Architecture

700px|Lucene.png


Lucene Process

700px|LuceneProcess.png


Lucene Score

700px|LuceneScore.png

  • 정보 검색 (Information Retrieval, IR) 평가

  • *Precision (정확도)    : 검색된 문서 중 원하는 문서의 비율

  • *Recall (재현율)    : 원하는 문서 중 검색된 문서의 비율

  • Search query

  • *정보 검색 모듈의 분류 체계

  • *Pure Boolean model과 Vector space model을 지원

{| border="1" cellspacing="0" cellpadding="2" style="width: 100%;" |- | style="text-align: center; background-color: rgb(241, 241, 241);" | 구분 | style="text-align: center; background-color: rgb(241, 241, 241);" | 분류

| style="text-align: center; background-color: rgb(241, 241, 241);" | 상세 |- | style="text-align: center;" | 집합론적 모델 | style="text-align: center;" | Pure Boolean model
(불리안 모델)
|

  • 매핑되는 문서를 검색
  • score 계산하지 않음

|- | style="text-align: center;" | 대수론적 모델 | style="text-align: center;" | Vector space model
(벡터 모델)
|

  • Query (Terms)와 Document를 벡터 거리 방식으로 관련성, 유사성 계산

|- | style="text-align: center;" | 확률론적 모델 | style="text-align: center;" | Probabilistic model
(확률 모델)
|

  • Document가 query와 매핑되는 확률을 계산

|}

  • Sample application
  • *com.jopenbusiness.hadoop.elasticsearch. lucene.cli.LuceneIndexer.java 참조
  • *com.jopenbusiness.hadoop.elasticsearch. lucene.cli.LuceneSearcher.java 참조

Lucene 용어

{| cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" |- | width="30%" align="center" valign="middle" style="background-color:#eee;" | 용어

| width="70%" align="center" valign="middle" style="background-color:#eee;" | 상세 |- | align="center" valign="middle" | '''Document'''
(DBMS의 record) |

  • 기본적인 정보의 저장 단위로써, 수집한 row content를 Field의 집합으로 관리

  • '''Field'''  : Document를 구성하고 있는 항목

    • name, fieldType, value로 구성

|- | align="center" valign="middle" | '''Analyzer''' |

  • Field의 value (text)로 부터 token을 추출
  • Analyzer 구성 (아래 순서대로 실행됨)
  • *'''CharFilter'''  : 전체 문자열 전처리 (복수)            <- 입력은 reader
  • *'''Tokenizer'''  : 전체 문자열을 Token으로 분할      <- 입력은 Reader
  • *'''TokenFilter'''  : Token에 대한 필터링 처리 (복수) <- 입력은 TokenStream

|- | align="center" valign="middle" | Index
(DBMS의 database) |

  • '''Directory'''  : Lucene 인덱스가 저장된 폴더

  • Segment  :Subindex. Index를 구성하는 요소로 독립적인 index 정보를 가짐

  • *segment_x

  • *_y.si : Segment Info, _y.cfs : Compound FileWriter , _y.cfe : Compound FileWriter

  • '''Term'''  : 저장과 검색을 위한 기본 단위

    • field name과 word (text)로 구성

|- | align="center" valign="middle" | '''Query''' |

  • 검색어 : Search String을 Lucene에서 사용하는 문법으로 변환한 것
  • 종류 : TermQuery, BooleanQuery, WildcardQuery, PhraseQuery, PrefixQuery, MultiPhraseQuery, FuzzyQuery, RegexpQuery, TermRangeQuery, NumericRangeQuery, ConstantScoreQuery, DisjunctionMaxQuery, MatchAllDocsQuery

|- | align="center" valign="middle" | '''Filter''' |

  • 종류 : CachingWrapperFilter, DocTermOrdsRangeFilter, FieldCacheRangeFilter, FieldCacheTermsFilter, FieldValueFilter, MultiTermQueryWrapperFilter, NumericRangeFilter, PrefixFilter, QueryWrapperFilter, TermRangeFilter

|- | align="center" valign="middle" | TopDocs |

  • 검색한 문서의 ID (docID)를 저장

|- | align="center" valign="middle" | '''Scorer''' |

  • 종류 : BoostScorer, BulkScorer, ConjunctionScorer, DisjunctionMaxScorer, DisjunctionScorer, DisjunctionSumScorer, ExactPhraseScorer, FakeScorer, MinShouldMatchSumScorer, ReqExclScorer, ReqOptSumScorer, ScoreCachingWrappingScorer, SloppyPhraseScorer, TermScorer

|}


Lucene Query language


{|cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" |- |width="30%" align="center" valign="middle" style="background-color:#eee;"|문법

|width="70%" align="center" valign="middle" style="background-color:#eee;"|상세 |- |align="center" valign="middle"|"term" |

  • "로 묶인 경우 중간에 공백이 있어도 하나의 term으로 처리
    |- |align="center" valign="middle"|AND, OR, NOT, () |
  • 논리 연산자, 생략된 경우에는 OR가 사용됨
    |- |align="center" valign="middle"|+term, -term |
  • +term : 반드시 term이 있어야 함
  • -term : 반드시 term이 없어야 함
    |- |align="center" valign="middle"|field:term |
  • field 내에서 term 검색
    |- |align="center" valign="middle"|termn, "term"n |
  • writer~2 : writer와 writers 검색
  • "master search"~2 : "master search"와 "master book search" 검색
    |- |align="center" valign="middle"|TO termTo |
  • TO 15.00 : 10.00에서 15.00까지 검색
  • To Adria : Adam에서 Adria까지 검색
    |- |align="center" valign="middle"|\특수문자 |
  • \를 사용하여 특수 문자 표시
    |}

자연어 처리


  • 자연어 처리 (Natural Language Processing, NLP) : 형태소 분석 -> 구문 분석 -> 의미 분석

    • 형태소 분석 (Morphological Analysis) : 문장을 형태소로 분해하고 각 형태소에 품사 등을 결정
    • 구문 분석 : 문법 규칙 및 여러 종류의 규칙에 의해 문장을 해석하고 그 구조를 명확히 함
    • 의미 분석 (Semantic Analysis) : 형태소의 의미를 해석
  • 자연어 처리 관련 용어

    • 자모 : 문자 체계의 한 요소 (자음, 모음)
    • 용언 : 꾸미는 말 (동사, 형용사)
    • 어간 (stem) : 용언이 활용할 때, 원칙적으로 모양이 변하지 않는 부분
    • 어미 : 용언이 활용할 때 변하는 부분으로 문법적 기능을 수행
    • 품사 : 명사, 대명사, 수사, 동사, 형용사, 관형사, 부사, 감탄사, 조사
    • 형태소 (Morpheme) : 의미를 가진 최소의 언어 단위
    • 어절 분류
      • NP_SBP : 명사 + 주격 조사
      • NP_OBJ : 명사 + 목적격 조사
      • NP_MOD : 명사 + 관형격 조사
      • VP : 동사 + 연결 어미 또는 동사 + 선어말 어미 + 종결 어미
  • 자연어 처리의 형식적 모델

    • n-gram : 문자의 빈도와 문자간 관계
    • Finite Automaton Model (유한 오토마톤 모델) : 인접한 단어간 문법적 제약을 수학적으로 모델링
  • 자연어 처리 평가

    • 정확도 (precision) : 실험 결과가 true인 것 중에서 실제 true인 것의 비율
    • 재현율 (recall) : 실제 true인 것 중에서 실험 결과가 true인 것의 비율
    • 정밀도 (accuracy) : 전체 결과 중 실제 정답과 같은 결과를 내놓은 실험 결과의 비율
  • 참고 문헌


색인기



Lucene 개발 환경


  • 라이브러리
 #--- 공통 라이브러리
 commons-logging-1.1.1.jar
 log4j-1.2.16.jar
 
 #--- Lucene 라이브러리
 lucene-core-4.8.1.jar
 lucene-analyzers-common-4.8.1.jar
 lucene-queryparser-4.8.1.jar
 lucene-suggest-4.8.1.jar
 lucene-queries-4.8.1.jar
 
 #--- ElasticSearch 라이브러리
 elasticsearch-1.2.0.jar
 elasticsearch-analysis-korean-1.3.0.jar    #--- Arirang 한글 형태소 분석기 포함

관련 오픈소스


{| cellspacing="0" cellpadding="2" style="width: 100%;" border="1" |- | style="text-align: center; background-color: rgb(241, 241, 241);" | 이름 | style="text-align: center; background-color: rgb(241, 241, 241);" | 종류

| style="text-align: center; background-color: rgb(241, 241, 241);" | 상세 |- | style="text-align: center;" | Nutch | style="text-align: center;" | 웹 수집기 | http://lucene.apache.org/nutch |- | style="text-align: center;" | Grub | style="text-align: center;" | 웹 수집기 | http://www.grub.org/ |- | style="text-align: center;" | Heritrix | style="text-align: center;" | 웹 수집기 | http://crawler.archive.org/ |- | style="text-align: center;" | Droids | style="text-align: center;" |
| http://incubator.apache.org/droids |- | style="text-align: center;" | Apeture | style="text-align: center;" | 수집기 | http://aperture.sourceforge.net/ |- | style="text-align: center;" | Google Enterprise
Connector Manager
| style="text-align: center;" | Connector |

|- | style="text-align: center;" |
| style="text-align: center;" | DB 연동 |
DBSight, Hivernate Search, LuSQL, Compass, Oracle/Lucene integration
|- | style="text-align: center;" | Solr | style="text-align: center;" |  분산 검색 엔진 | http://lucene.apache.org/solr
|- | style="text-align: center;" | Tika in Solr
| style="text-align: center;" | 수집기 | 문서 필터링 |- | style="text-align: center;" | ElasticSearch | style="text-align: center;" | 분산 검색 엔진 | http://www.elasticsearch.com/
|}


참고 문헌


[[Category:Search|Category:Search]]
분류: BigData

최종 수정일: 2022-10-24 19:17:28

이전글 :
다음글 :
상단 menu
arrow_back_ios
arrow_forward_ios