Package com.easydesk.lucene


package com.easydesk.lucene

easydesk-spring-lucene

기존 Avalon / Turbine Fulcrum 기반 lucene (com.nannet.fulcrum.lucene) component 를 Spring + Lucene 10.5.2 로 옮긴 module 이다. OM document builder 는 easydesk-spring-lucene-om 에 있다.

Lucene 10 은 Java 21 이상에서 실행된다. (compile 은 project 설정대로 release 17)

사용

java
@Configuration
@Import(LuceneConfig.class)        // OM index 까지 사용하면 LuceneOmConfig
public class AppConfig { }
주입 typebean
SearchServiceLuceneSearchService (index/search/commit/optimize/backup)
Searchable, LocalSearchable, IndexerDefaultSearchClient (@Primary)

설정 (기존 componentConfiguration.xml <lucene> 대체)

property기본값기존 설정
easydesk.lucene.index-locationlucene<indexLocation>
easydesk.lucene.analyzercom.easydesk.lucene.analyzer.CJKAnalyzer<analyzer>
easydesk.lucene.commit-period60000 (msec)<sleepPeriod>
easydesk.lucene.ram-buffer-size-mb16-
easydesk.lucene.recreate-incompatible-indexfalse-
easydesk.lucene.slow-search-threshold50 (msec)-

<version> 은 없어졌다. (Lucene 10 Analyzer 는 Version 을 받지 않는다.) <serverName>, <serverPort> (RMI remote mode) 는 제거되었다.

기존 구조와 달라진 점

기존 (Avalon, Lucene 4.1)현재 (Spring, Lucene 10.5.2)
Configurable / Initializable / Disposable생성자 + @PostConstruct / @PreDestroy
ServiceManager.lookup(SearchService.ROLE)생성자 주입
MMapDirectory + RAMDirectory + Flusher(0.5s) / Worker(60s) threadlocation 별 IndexWriter + near-real-time SearcherManager, @Scheduled commit
Filter / ChainedFilter (module filter)BooleanClause.Occur.FILTER + LongField.newSetQuery
BitVector moduleFilter (easydesk-math)java.util.BitSet moduleFilter (null = 제한 없음, 비어 있음 = 결과 없음)
Collector (Lucene 4)SimpleCollector + CollectorManager
NumericRangeQuery / IntField / LongFieldLucene 10 IntField / LongField (point + doc values)
JFlex 1.6 grammar (Unicode 6.1)Lucene 10.5.2 StandardTokenizerImpl.jflex (Unicode 12.1, Emoji) + MathJax $...$ rule, JFlex 1.9.1
addDocument 시 unique term 이 document 에 없으면 삭제 실패IndexWriter.updateDocument(term, doc), document 가 null 이면 삭제
RMI Remote Server / Client제거 (Lucene 6 에서 RMI 지원 제거, Lucene Document 는 Serializable 이 아님)

Index 호환성

Lucene 10 은 Lucene 9.0 이후에 만든 index 만 읽을 수 있다. 기존 Lucene 4.x index 는 열리지 않으므로 re-index 가 필요하다. 기존 index 가 남아 있으면 기동 시 ERROR log 를 남기고 그 location 은 건너뛴다. easydesk.lucene.recreate-incompatible-index=true 로 두면 해당 location 의 이전 index file 을 지우고 빈 index 를 만든다.

TODO :

Index Server 를 분리할 경우 처리 ( 4.1 시절에는 RMI 로 Service-Client 를 분리 했으나 RemoteSearchable 지원은 종료됨, REST-API 적용 ?? )