"Lucene"의 두 판 사이의 차이

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기
 
잔글
11번째 줄: 11번째 줄:
 
*플랫폼 : [[Java]]
 
*플랫폼 : [[Java]]
  
==Lucene 개요==
+
== Lucene 개요 ==
 +
 
 
*Lucene Architecture
 
*Lucene Architecture
:[[파일:Lucene.png|700px]]
+
 
 +
:[[File:Lucene.png|700px|Lucene.png]]
  
 
*Lucene Process 이해
 
*Lucene Process 이해
:[[파일:LuceneProcess.png|700px]]
+
 
 +
:[[File:LuceneProcess.png|700px|LuceneProcess.png]]
  
 
*Lucene Score
 
*Lucene Score
[[파일:LuceneScore.png|700px]]
+
 
 +
[[File:LuceneScore.png|700px|LuceneScore.png]]
  
 
*용어 이해
 
*용어 이해
{|cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center"
+
 
 +
{| cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center"
 
|-
 
|-
|width="30%" align="center" valign="middle" style="background-color:#eee;"|용어
+
| width="30%" align="center" valign="middle" style="background-color:#eee;" | 용어
|width="70%" align="center" valign="middle" style="background-color:#eee;"|상세
+
| width="70%" align="center" valign="middle" style="background-color:#eee;" | 상세
 
|-
 
|-
|align="center" valign="middle"|Document<br/>(DBMS의 record)
+
| align="center" valign="middle" | Document<br/>(DBMS의 record)
|
+
|  
 
*기본적인 정보의 저장 단위로써, 수집한 row content를 Field의 집합으로 관리
 
*기본적인 정보의 저장 단위로써, 수집한 row content를 Field의 집합으로 관리
*Field : Document를 구성하고 있는 항목
+
*Field &nbsp;: Document를 구성하고 있는 항목
 +
 
 
:*name, fieldType, value로 구성
 
:*name, fieldType, value로 구성
 +
 
|-
 
|-
|align="center" valign="middle"|Analyzer
+
| align="center" valign="middle" | Analyzer
|
+
|  
 
*Field의 value (text)로 부터 token을 추출
 
*Field의 value (text)로 부터 token을 추출
*Analyzer 구성
+
*Analyzer 구성 (아래 순서대로 실행됨)
:*CharFilter     : 전체 문자열 전처리 (복수)
+
 
:*Tokenizer     : 전체 문자열을 Token으로 분할
+
:*CharFilter &nbsp;: 전체 문자열 전처리 (복수)
:*TokenFilter   : Token에 대한 필터링 처리 (복수)
+
:*Tokenizer &nbsp;: 전체 문자열을 Token으로 분할
 +
:*TokenFilter &nbsp;: Token에 대한 필터링 처리 (복수)
 +
 
 
|-
 
|-
|align="center" valign="middle"|Index<br/>(DBMS의 database)
+
| align="center" valign="middle" | Index<br/>(DBMS의 database)
|
+
|  
*Directory   : Lucene 인덱스가 저장된 폴더
+
*Directory &nbsp;: Lucene 인덱스가 저장된 폴더
*Segment   :  
+
*Segment &nbsp;:Index를 구성하는 요소로 독립적인 index 정보를 가짐
*Term       : 저장과 검색을 위한 기본 단위
+
*Term &nbsp;: 저장과 검색을 위한 기본 단위
 +
 
 
:*field name과 word (text)로 구성
 
:*field name과 word (text)로 구성
 +
 
|-
 
|-
|align="center" valign="middle"|Query
+
| align="center" valign="middle" | Query
|
+
|  
*검색어 : Search String을 Lucene에서 사용하는 문법으로 변환한 것
+
*검색어&nbsp;: Search String을 Lucene에서 사용하는 문법으로 변환한 것
*종류 : TermQuery, BooleanQuery, WildcardQuery, PhraseQuery, PrefixQuery, MultiPhraseQuery, FuzzyQuery, RegexpQuery, TermRangeQuery, NumericRangeQuery, ConstantScoreQuery, DisjunctionMaxQuery, MatchAllDocsQuery
+
*종류&nbsp;: TermQuery, BooleanQuery, WildcardQuery, PhraseQuery, PrefixQuery, MultiPhraseQuery, FuzzyQuery, RegexpQuery, TermRangeQuery, NumericRangeQuery, ConstantScoreQuery, DisjunctionMaxQuery, MatchAllDocsQuery
 +
 
 
|-
 
|-
|align="center" valign="middle"|Filter
+
| align="center" valign="middle" | Filter
|
+
|  
*종류 : CachingWrapperFilter, DocTermOrdsRangeFilter, FieldCacheRangeFilter, FieldCacheTermsFilter, FieldValueFilter, MultiTermQueryWrapperFilter, NumericRangeFilter, PrefixFilter, QueryWrapperFilter, TermRangeFilter
+
*종류&nbsp;: CachingWrapperFilter, DocTermOrdsRangeFilter, FieldCacheRangeFilter, FieldCacheTermsFilter, FieldValueFilter, MultiTermQueryWrapperFilter, NumericRangeFilter, PrefixFilter, QueryWrapperFilter, TermRangeFilter
 +
 
 
|-
 
|-
|align="center" valign="middle"|TopDocs
+
| align="center" valign="middle" | TopDocs
|
+
|  
 
*검색한 문서의 ID (docID)를 저장
 
*검색한 문서의 ID (docID)를 저장
 +
 
|-
 
|-
|align="center" valign="middle"|Scorer
+
| align="center" valign="middle" | Scorer
|
+
|  
*종류 : BoostScorer, BulkScorer, ConjunctionScorer, DisjunctionMaxScorer, DisjunctionScorer, DisjunctionSumScorer, ExactPhraseScorer, FakeScorer, MinShouldMatchSumScorer, ReqExclScorer, ReqOptSumScorer, ScoreCachingWrappingScorer, SloppyPhraseScorer, TermScorer
+
*종류&nbsp;: BoostScorer, BulkScorer, ConjunctionScorer, DisjunctionMaxScorer, DisjunctionScorer, DisjunctionSumScorer, ExactPhraseScorer, FakeScorer, MinShouldMatchSumScorer, ReqExclScorer, ReqOptSumScorer, ScoreCachingWrappingScorer, SloppyPhraseScorer, TermScorer
 +
 
 
|}
 
|}
  

2014년 11월 11일 (화) 12:32 판

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

  • 다운로드 :
  • 라이선스 :
  • 플랫폼 : Java

Lucene 개요

  • Lucene Architecture
Lucene.png
  • Lucene Process 이해
LuceneProcess.png
  • Lucene Score

LuceneScore.png

  • 용어 이해
용어 상세
Document
(DBMS의 record)
  • 기본적인 정보의 저장 단위로써, 수집한 row content를 Field의 집합으로 관리
  • Field  : Document를 구성하고 있는 항목
  • name, fieldType, value로 구성
Analyzer
  • Field의 value (text)로 부터 token을 추출
  • Analyzer 구성 (아래 순서대로 실행됨)
  • CharFilter  : 전체 문자열 전처리 (복수)
  • Tokenizer  : 전체 문자열을 Token으로 분할
  • TokenFilter  : Token에 대한 필터링 처리 (복수)
Index
(DBMS의 database)
  • Directory  : Lucene 인덱스가 저장된 폴더
  • Segment  :Index를 구성하는 요소로 독립적인 index 정보를 가짐
  • Term  : 저장과 검색을 위한 기본 단위
  • field name과 word (text)로 구성
Query
  • 검색어 : Search String을 Lucene에서 사용하는 문법으로 변환한 것
  • 종류 : TermQuery, BooleanQuery, WildcardQuery, PhraseQuery, PrefixQuery, MultiPhraseQuery, FuzzyQuery, RegexpQuery, TermRangeQuery, NumericRangeQuery, ConstantScoreQuery, DisjunctionMaxQuery, MatchAllDocsQuery
Filter
  • 종류 : CachingWrapperFilter, DocTermOrdsRangeFilter, FieldCacheRangeFilter, FieldCacheTermsFilter, FieldValueFilter, MultiTermQueryWrapperFilter, NumericRangeFilter, PrefixFilter, QueryWrapperFilter, TermRangeFilter
TopDocs
  • 검색한 문서의 ID (docID)를 저장
Scorer
  • 종류 : BoostScorer, BulkScorer, ConjunctionScorer, DisjunctionMaxScorer, DisjunctionScorer, DisjunctionSumScorer, ExactPhraseScorer, FakeScorer, MinShouldMatchSumScorer, ReqExclScorer, ReqOptSumScorer, ScoreCachingWrappingScorer, SloppyPhraseScorer, TermScorer

Lucene Query language

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

자연어 처리

  • 자연어 처리 (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 한글 형태소 분석기 포함

참고 문헌

  • 인공지능 - 자연어 처리
  • Score