Package com.easydesk.lucene
Class LuceneSearchService
java.lang.Object
com.easydesk.lucene.LuceneSearchService
- All Implemented Interfaces:
IndexConstants,Searchable,SearchService
Spring 기반 Lucene Search Service.
기존 Avalon 기반 BaseLuceneSearchService / DefaultOMSearchService 를 대체한다.
Configurable.configure(Configuration)→ 생성자 / setter (easydesk.lucene.*property 는LuceneConfig에서 주입)Initializable.initialize()→PostConstructDisposable.dispose()→PreDestroy- RAMDirectory + Flusher/Worker thread → index location 별
LuceneIndex(IndexWriter + near-real-time SearcherManager) 와 주기적인commit()(Scheduled) - Lucene
Filter(module filter) →BooleanClause.Occur.FILTERclause - RMI Remote Server mode 는 제거되었다. (Spring 6 에서 RMI 지원 제거, Lucene Document 는 Serializable 이 아님)
indexLocation 아래 상대 경로 (예: 3/attribute/12) 별로 독립된 Lucene index 로 관리된다.- Author:
- 조 영 호
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringDefault analyzer classstatic final Stringindex location wildcard : 경로 한 단계와 일치한다.Fields inherited from interface com.easydesk.lucene.IndexConstants
AND, ATTACHMENT_ID, ATTACHMENT_PREFIX, ATTACHMENT_TYPE_ID, ATTRIBUTE_ID, ATTRIBUTE_PREFIX, CREATED_DATE, CREATER_NAME, CREATER_NICK_NAME, CREATER_USER_NAME, DATE, DEPEND_ID, DEPEND_TYPE_ID, FLOAT_NUMBER, ITEM_ID, KEY_WORD, MODULE_ID, NUMBER, OR, PARENT_ID, RANGE, TEXT, USER_ID, USER_ITEM_ID, VALUE_ID -
Constructor Summary
ConstructorsConstructorDescriptionLuceneSearchService(Path indexLocation, org.apache.lucene.analysis.Analyzer analyzer) Creates a new LuceneSearchService. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddDocument(Indexable doc) document 를 index 에 추가(교체)한다.backup()Index 를 index root 옆의lucene_yyyy-MM-dddirectory 로 backup 한다.voidclose()모든 index 를 commit 하고 닫는다.voidcommit()변경된 내용을 모든 index 에 commit 한다.static org.apache.lucene.analysis.AnalyzercreateAnalyzer(String className) Analyzer class 이름으로 analyzer 를 만든다.void모든 index 의 document 를 지우고 commit 한다.org.apache.lucene.analysis.Analyzer검색과 index 에 사용하는 Analyzervoidindex root 아래의 index 들을 연다.booleanisLocal()서버가 Local 인지 아니면 Remote 인지열려 있는 index location 중 wildcard pattern 에 맞는 것을 구한다.voidoptimize()Index 를 Optimize (segment 를 하나로 merge) 한다.voidrefresh()변경된 내용을 즉시 검색에 반영한다.void변경된 내용을 주기적으로 commit 한다search item주어진 index 들에서 query 로 검색하여IndexConstants.ITEM_ID를 수집한다.voidsetRamBufferSizeMB(double ramBufferSizeMB) voidsetRecreateIncompatibleIndex(boolean recreateIncompatibleIndex) voidsetSlowSearchThreshold(long slowSearchThreshold) protected Stringindex location 을 index root 기준의 정규화된 상대 경로로 만든다.
-
Field Details
-
DEFAULT_ANALYZER
Default analyzer class- See Also:
-
WILDCARD
index location wildcard : 경로 한 단계와 일치한다. (예:*/attribute/12는 모든 module 의 itemType 12)- See Also:
-
-
Constructor Details
-
LuceneSearchService
Creates a new LuceneSearchService.- Parameters:
indexLocation- index root directoryanalyzer- analyzer
-
-
Method Details
-
createAnalyzer
Analyzer class 이름으로 analyzer 를 만든다. (no-arg constructor 필요)- Parameters:
className- analyzer class name- Returns:
- analyzer
-
setRamBufferSizeMB
public void setRamBufferSizeMB(double ramBufferSizeMB) - Parameters:
ramBufferSizeMB- IndexWriter RAM buffer size (MB)
-
setRecreateIncompatibleIndex
public void setRecreateIncompatibleIndex(boolean recreateIncompatibleIndex) - Parameters:
recreateIncompatibleIndex- true 이면 이전 Lucene version (예: 4.x) 으로 만들어진 index 의 file 을 삭제하고 빈 index 를 새로 만든다. (re-index 필요)
-
setSlowSearchThreshold
public void setSlowSearchThreshold(long slowSearchThreshold) - Parameters:
slowSearchThreshold- 이 시간(msec) 보다 오래 걸린 검색은 WARN log 를 남긴다.
-
getIndexLocation
- Returns:
- index root directory
-
getAnalyzer
public org.apache.lucene.analysis.Analyzer getAnalyzer()Description copied from interface:SearchService검색과 index 에 사용하는 Analyzer- Specified by:
getAnalyzerin interfaceSearchService- Returns:
- analyzer
-
getLocations
- Returns:
- 열려 있는 index location 목록
-
getIndex
- Parameters:
location- index location- Returns:
- 열려 있는 index, 없으면
null
-
initialize
index root 아래의 index 들을 연다.- Throws:
IOException- 오류
-
close
모든 index 를 commit 하고 닫는다. -
search
Description copied from interface:Searchablesearch item- Specified by:
searchin interfaceSearchable- Parameters:
info- query 정보moduleFilter- 검색이 허용된 module id 의 BitSet.null이면 module filter 를 적용하지 않고, 비어 있으면 검색이 허용된 module 이 없으므로 결과가 없다. (기존BitVector를 대체)path- index path (index root 기준 상대 경로) 배열.*는 경로 한 단계와 일치한다. (예: 모든 module 의 itemType 12 attribute index :*/attribute/12)- Returns:
IndexConstants.ITEM_ID를 수집한 BitSet- Throws:
IOException- search engine 오류
-
match
열려 있는 index location 중 wildcard pattern 에 맞는 것을 구한다.*는 경로 한 단계 (segment) 와 일치한다.- Parameters:
pattern- 예:*/attribute/12- Returns:
- matched locations
-
search
주어진 index 들에서 query 로 검색하여IndexConstants.ITEM_ID를 수집한다.- Parameters:
query- querypath- index location 배열- Returns:
- 수집된 ITEM_ID
- Throws:
IOException- 오류
-
addDocument
Description copied from interface:Searchabledocument 를 index 에 추가(교체)한다.Indexable.getDocument()가null이면 제거한다.- Specified by:
addDocumentin interfaceSearchable- Parameters:
doc- index 대상- Throws:
IOException- index 오류
-
isLocal
public boolean isLocal()Description copied from interface:Searchable서버가 Local 인지 아니면 Remote 인지- Specified by:
isLocalin interfaceSearchable- Returns:
- local 이면 true
-
scheduledCommit
@Scheduled(fixedDelayString="${easydesk.lucene.commit-period:60000}", initialDelayString="${easydesk.lucene.commit-period:60000}") public void scheduledCommit()변경된 내용을 주기적으로 commit 한다. (easydesk.lucene.commit-period, 기본 60초) -
commit
Description copied from interface:SearchService변경된 내용을 모든 index 에 commit 한다.- Specified by:
commitin interfaceSearchService- Throws:
IOException- index 오류
-
refresh
변경된 내용을 즉시 검색에 반영한다. (보통은 검색할 때 자동으로 반영된다.)- Throws:
IOException- 오류
-
deleteAll
Description copied from interface:SearchService모든 index 의 document 를 지우고 commit 한다. (re-index 전에 사용)- Specified by:
deleteAllin interfaceSearchService- Throws:
IOException- index 오류
-
optimize
Description copied from interface:SearchServiceIndex 를 Optimize (segment 를 하나로 merge) 한다. 비용이 큰 작업이므로 운영 중에는 주의하여 사용한다.- Specified by:
optimizein interfaceSearchService- Throws:
IOException- index 오류
-
backup
Description copied from interface:SearchServiceIndex 를 index root 옆의lucene_yyyy-MM-dddirectory 로 backup 한다.- Specified by:
backupin interfaceSearchService- Returns:
- backup directory
- Throws:
IOException- index 오류
-
toKey
index location 을 index root 기준의 정규화된 상대 경로로 만든다.- Parameters:
location- 상대 경로 또는 index root 아래의 절대 경로. index root 밖의 절대 경로는 root 를 제외한 경로를 상대 경로로 사용한다. (기존BaseLuceneSearchService.getIndexLocation과 동일)- Returns:
- key (
/구분자)
-