"Lucene"의 두 판 사이의 차이
둘러보기로 가기
검색하러 가기
잔글 |
잔글 |
||
(같은 사용자의 중간 판 5개는 보이지 않습니다) | |||
13번째 줄: | 13번째 줄: | ||
== Lucene 개요 == | == Lucene 개요 == | ||
− | + | === Lucene Architecture === | |
:[[File:Lucene.png|700px|Lucene.png]] | :[[File:Lucene.png|700px|Lucene.png]] | ||
− | + | === Lucene Process === | |
:[[File:LuceneProcess.png|700px|LuceneProcess.png]] | :[[File:LuceneProcess.png|700px|LuceneProcess.png]] | ||
− | + | === Lucene Score === | |
[[File:LuceneScore.png|700px|LuceneScore.png]] | [[File:LuceneScore.png|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<br/>(불리안 모델)<br/> | ||
+ | | | ||
+ | *매핑되는 문서를 검색 | ||
+ | *score 계산하지 않음 | ||
+ | |||
+ | |- | ||
+ | | style="text-align: center;" | 대수론적 모델 | ||
+ | | style="text-align: center;" | Vector space model<br/>(벡터 모델)<br/> | ||
+ | | | ||
+ | *<div>Query (Terms)와 Document를 벡터 거리 방식으로 관련성, 유사성 계산</div> | ||
+ | |||
+ | |- | ||
+ | | style="text-align: center;" | 확률론적 모델 | ||
+ | | style="text-align: center;" | Probabilistic model<br/>(확률 모델)<br/> | ||
+ | | | ||
+ | *<div>Document가 query와 매핑되는 확률을 계산</div> | ||
+ | |||
+ | |} | ||
+ | |||
+ | |||
+ | |||
+ | *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" | {| cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" | ||
32번째 줄: | 76번째 줄: | ||
| 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" | '''<span style="color:#0000FF;">Document</span>'''<br/>(DBMS의 record) |
| | | | ||
*기본적인 정보의 저장 단위로써, 수집한 row content를 Field의 집합으로 관리 | *기본적인 정보의 저장 단위로써, 수집한 row content를 Field의 집합으로 관리 | ||
− | *Field : Document를 구성하고 있는 항목 | + | *<span style="color:#0000FF;">'''Field'''</span> : Document를 구성하고 있는 항목 |
:*name, fieldType, value로 구성 | :*name, fieldType, value로 구성 | ||
|- | |- | ||
− | | align="center" valign="middle" | Analyzer | + | | align="center" valign="middle" | <span style="color:#0000FF;">'''Analyzer'''</span> |
| | | | ||
*Field의 value (text)로 부터 token을 추출 | *Field의 value (text)로 부터 token을 추출 | ||
*Analyzer 구성 (아래 순서대로 실행됨) | *Analyzer 구성 (아래 순서대로 실행됨) | ||
− | + | **<span style="color:#0000FF;">'''CharFilter'''</span> : 전체 문자열 전처리 (복수) <- 입력은 reader | |
− | : | + | **<span style="color:#0000FF;">'''Tokenizer'''</span> : 전체 문자열을 Token으로 분할 <- 입력은 Reader |
− | : | + | **<span style="color:#0000FF;">'''TokenFilter'''</span> : Token에 대한 필터링 처리 (복수) <- 입력은 TokenStream |
− | : | ||
|- | |- | ||
| align="center" valign="middle" | Index<br/>(DBMS의 database) | | align="center" valign="middle" | Index<br/>(DBMS의 database) | ||
| | | | ||
− | *Directory : Lucene 인덱스가 저장된 폴더 | + | *<span style="color:#0000FF;">'''Directory'''</span> : Lucene 인덱스가 저장된 폴더 |
− | *Segment :Index를 구성하는 요소로 독립적인 index 정보를 가짐 | + | *Segment :Subindex. Index를 구성하는 요소로 독립적인 index 정보를 가짐 |
− | *Term : 저장과 검색을 위한 기본 단위 | + | **segment_x |
+ | **_y.si : Segment Info, _y.cfs : Compound FileWriter , _y.cfe : Compound FileWriter | ||
+ | *<span style="color:#0000FF;">'''Term'''</span> : 저장과 검색을 위한 기본 단위 | ||
:*field name과 word (text)로 구성 | :*field name과 word (text)로 구성 | ||
|- | |- | ||
− | | align="center" valign="middle" | Query | + | | align="center" valign="middle" | <span style="color:#0000FF;">'''Query'''</span> |
| | | | ||
*검색어 : Search String을 Lucene에서 사용하는 문법으로 변환한 것 | *검색어 : Search String을 Lucene에서 사용하는 문법으로 변환한 것 | ||
65번째 줄: | 110번째 줄: | ||
|- | |- | ||
− | | align="center" valign="middle" | Filter | + | | align="center" valign="middle" | '''<span style="color:#0000FF;">Filter</span>''' |
| | | | ||
*종류 : CachingWrapperFilter, DocTermOrdsRangeFilter, FieldCacheRangeFilter, FieldCacheTermsFilter, FieldValueFilter, MultiTermQueryWrapperFilter, NumericRangeFilter, PrefixFilter, QueryWrapperFilter, TermRangeFilter | *종류 : CachingWrapperFilter, DocTermOrdsRangeFilter, FieldCacheRangeFilter, FieldCacheTermsFilter, FieldValueFilter, MultiTermQueryWrapperFilter, NumericRangeFilter, PrefixFilter, QueryWrapperFilter, TermRangeFilter | ||
75번째 줄: | 120번째 줄: | ||
|- | |- | ||
− | | align="center" valign="middle" | Scorer | + | | align="center" valign="middle" | <span style="color:#0000FF;">'''Scorer'''</span> |
| | | | ||
*종류 : BoostScorer, BulkScorer, ConjunctionScorer, DisjunctionMaxScorer, DisjunctionScorer, DisjunctionSumScorer, ExactPhraseScorer, FakeScorer, MinShouldMatchSumScorer, ReqExclScorer, ReqOptSumScorer, ScoreCachingWrappingScorer, SloppyPhraseScorer, TermScorer | *종류 : BoostScorer, BulkScorer, ConjunctionScorer, DisjunctionMaxScorer, DisjunctionScorer, DisjunctionSumScorer, ExactPhraseScorer, FakeScorer, MinShouldMatchSumScorer, ReqExclScorer, ReqOptSumScorer, ScoreCachingWrappingScorer, SloppyPhraseScorer, TermScorer | ||
176번째 줄: | 221번째 줄: | ||
== 관련 오픈소스 == | == 관련 오픈소스 == | ||
+ | |||
+ | {| 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|Nutch]] | ||
+ | | style="text-align: center;" | 웹 수집기 | ||
+ | | [http://lucene.apache.org/nutch http://lucene.apache.org/nutch] | ||
+ | |- | ||
+ | | style="text-align: center;" | [[Grub|Grub]] | ||
+ | | style="text-align: center;" | 웹 수집기 | ||
+ | | [http://www.grub.org/ http://www.grub.org/] | ||
+ | |- | ||
+ | | style="text-align: center;" | [[Heritrix|Heritrix]] | ||
+ | | style="text-align: center;" | 웹 수집기 | ||
+ | | [http://crawler.archive.org/ http://crawler.archive.org/] | ||
+ | |- | ||
+ | | style="text-align: center;" | [[Droids|Droids]] | ||
+ | | style="text-align: center;" | <br/> | ||
+ | | [http://incubator.apache.org/droids http://incubator.apache.org/droids] | ||
+ | |- | ||
+ | | style="text-align: center;" | [[Apeture|Apeture]] | ||
+ | | style="text-align: center;" | 수집기 | ||
+ | | [http://aperture.sourceforge.net/ http://aperture.sourceforge.net/] | ||
+ | |- | ||
+ | | style="text-align: center;" | Google Enterprise<br/>Connector Manager<br/> | ||
+ | | style="text-align: center;" | Connector | ||
+ | | <div>[http://code.google.com/p/google-enterprise-connector-manager http://code.google.com/p/google-enterprise-connector-manager]</div> | ||
+ | |- | ||
+ | | style="text-align: center;" | <br/> | ||
+ | | style="text-align: center;" | DB 연동 | ||
+ | | <div>DBSight, Hivernate Search, LuSQL, Compass, Oracle/Lucene integration</div> | ||
+ | |- | ||
+ | | style="text-align: center;" | [[Solr|Solr]] | ||
+ | | style="text-align: center;" | 분산 검색 엔진 | ||
+ | | [http://lucene.apache.org/solr http://lucene.apache.org/solr]<br/> | ||
+ | |- | ||
+ | | style="text-align: center;" | [[Tika|Tika]] in Solr<br/> | ||
+ | | style="text-align: center;" | 수집기 | ||
+ | | 문서 필터링 | ||
+ | |- | ||
+ | | style="text-align: center;" | [[ElasticSearch|ElasticSearch]] | ||
+ | | style="text-align: center;" | 분산 검색 엔진 | ||
+ | | [http://www.elasticsearch.com/ http://www.elasticsearch.com/]<br/> | ||
+ | |} | ||
== 참고 문헌 == | == 참고 문헌 == |
2014년 11월 11일 (화) 12:55 기준 최신판
검색 엔진인 Lucene을 정리 합니다.
- 홈페이지 : http://lucene.apache.org/
- 다운로드 :
- 라이선스 :
- 플랫폼 : Java
목차
Lucene 개요
Lucene Architecture
Lucene Process
Lucene Score
- 정보 검색 (Information Retrieval, IR) 평가
- Precision (정확도) : 검색된 문서 중 원하는 문서의 비율
- Recall (재현율) : 원하는 문서 중 검색된 문서의 비율
- Search query
- 정보 검색 모듈의 분류 체계
- Pure Boolean model과 Vector space model을 지원
구분 | 분류 | 상세 |
집합론적 모델 | Pure Boolean model (불리안 모델) |
|
대수론적 모델 | Vector space model (벡터 모델) |
|
확률론적 모델 | Probabilistic model (확률 모델) |
|
- Sample application
- com.jopenbusiness.hadoop.elasticsearch. lucene.cli.LuceneIndexer.java 참조
- com.jopenbusiness.hadoop.elasticsearch. lucene.cli.LuceneSearcher.java 참조
Lucene 용어
용어 | 상세 |
Document (DBMS의 record) |
|
Analyzer |
|
Index (DBMS의 database) |
|
Query |
|
Filter |
|
TopDocs |
|
Scorer |
|
Lucene Query language
문법 | 상세 |
"term" |
|
AND, OR, NOT, () |
|
+term, -term |
|
field:term |
|
term~n, "term"~n |
|
[termFr TO termTo] |
|
\특수문자 |
|
자연어 처리
- 자연어 처리 (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 한글 형태소 분석기 포함
관련 오픈소스
이름 | 종류 | 상세 |
Nutch | 웹 수집기 | http://lucene.apache.org/nutch |
Grub | 웹 수집기 | http://www.grub.org/ |
Heritrix | 웹 수집기 | http://crawler.archive.org/ |
Droids | http://incubator.apache.org/droids | |
Apeture | 수집기 | http://aperture.sourceforge.net/ |
Google Enterprise Connector Manager |
Connector | |
DB 연동 | DBSight, Hivernate Search, LuSQL, Compass, Oracle/Lucene integration
| |
Solr | 분산 검색 엔진 | http://lucene.apache.org/solr |
Tika in Solr |
수집기 | 문서 필터링 |
ElasticSearch | 분산 검색 엔진 | http://www.elasticsearch.com/ |
참고 문헌
- Solr, ElasticSearch
- Nutch : 오픈 소스 인터넷 웹 검색엔진 프로젝트
- RegExp
- OpenNLP
- 인공지능 - 자연어 처리
- Score