사용하던 Lucene의 버전을 3.5에서 4.9로 업그레이드 하려고 합니다.
우선 라이브러리 교체 후 코드가 돌아가기 위한 최소한의 고려 사항을 정리해 보았습니다.
루씬의 버전을 3.5에서 4.9로 업그레이드 시에 고려해야 될 사항입니다.
1) Field 사용 변경 (Field.Store.YES + NOT_ANALYZED_NO_NORMS -> StringField)
document.add(new Field("Name", texts, Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS)); --> document.add(new StringField("Name", texts, Field.Store.YES));
2) Field 사용 변경 (Field.Store.YES + ANALYZED_NO_NORMS -> TextField)
document.add(new Field("desc", texts, Field.Store.YES, Field.Index.ANALYZED_NO_NORMS)); --> document.add(new TextField("desc", texts, Field.Store.YES));
3) Field 사용 변경 (Field.Store.YES + Field.Index.NO -> StoredField)
document.add(new Field("path", texts, Field.Store.YES, Field.Index.NO)); --> document.add(new StoredField("path", texts));
4) Field 사용 변경 (Field.Store.YES + NumericField -> IntField, DoubleField)
document.add(new NumericField("min", Field.Store.YES, true).setDoubleValue(Double.parseDouble(texts))); --> document.add(new DoubleField("min", Double.parseDouble(texts), Field.Store.YES));
5) 타입 위치 변경 : SortField.STRING --> SortField.Type.STRING
List<Event> list = testReaderManager.getList(booleanQuery, startDate, endDate, count, 1, new Sort(new SortField("date", SortField.STRING, true)), true);
--> List<Event> list = testIndexReaderManager.getList(booleanQuery, startDate, endDate, count, 1, new Sort(new SortField("date", SortField.Type.STRING, true)), true);
6) 버전 정보 벼경 : Version.LUCENE_33 --> Version.LUCENE_4_9
QueryParser parser = new QueryParser(Version.LUCENE_33, "flag", new StandardAnalyzer(Version.LUCENE_33));
--> QueryParser parser = new QueryParser(Version.LUCENE_33, "flag", new StandardAnalyzer(Version.LUCENE_33));
7) 위치 변경 : QueryParser -> classic.QueryParser
import org.apache.lucene.queryParser.QueryParser; --> import org.apache.lucene.queryparser.classic.QueryParser;
8) 위치 변경 : ParseException -> classic.ParseException
import org.apache.lucene.queryParser.ParseException; --> import org.apache.lucene.queryparser.classic.ParseException;
9) 위치 변경 : grouping 패키지 경로 이동
import org.apache.lucene.search.grouping.TermFirstPassGroupingCollector; --> import org.apache.lucene.search.grouping.term.TermFirstPassGroupingCollector;
import org.apache.lucene.search.grouping.TermSecondPassGroupingCollector; --> import org.apache.lucene.search.grouping.term.TermSecondPassGroupingCollector;
10) 인터페이스 변경 : IndexReader.open -> DirectoryReader.open, IndexReader.indexExists -> DirectoryReader.indexExists
indexReaderList.add(IndexReader.open(FSDirectory.open(file), true)); --> indexReaderList.add(DirectoryReader.open(FSDirectory.open(file)));
11) 인터페이스 변경 : new TermRangeQuery -> TermRangeQuery.newStringRange,
TermRangeQuery termRangeQuery = new TermRangeQuery("date",from, to, true, true ); --> TermRangeQuery termRangeQuery = TermRangeQuery.newStringRange("date", from, to, true, true);
TermRangeFilter termRangeFilter = new TermRangeFilter("date", WriterSupportUtils.getDateStringForHour(startDate), WriterSupportUtils.getDateStringForHour(endDate), false, false);
--> TermRangeFilter termRangeFilter = TermRangeFilter.newStringRange("date", WriterSupportUtils.getDateStringForHour(startDate), WriterSupportUtils.getDateStringForHour(endDate), false, false);
12) 함수 삭제 : indexSearcher.close 삭제
**메모리 leak이 없는지 aging 테스트 필요함
13) grouping 파라미터 타입 변경 (String -> BytesRef)
Collection<SearchGroup<String>> topGroups = c1.getTopGroups(0, true); -> Collection<SearchGroup<BytesRef>> topGroups = c1.getTopGroups(0, true);
TopGroups<String> groupsResult = c2.getTopGroups(0); -> TopGroups<BytesRef> groupsResult = c2.getTopGroups(0);
GroupDocs<String>[] docs = groupsResult.groups; -> GroupDocs<BytesRef>[] docs = groupsResult.groups;
그래도 3.5에서 4.9 로의 변환에는 기존 인덱스의 하위호환을 그대로 지켜주어서 다행입니다.
이후 5.x 대에서는 3.x 버전 인덱스에 대하여 전체 재인덱싱을 해야 되는 상황이 올 듯 합니다. 그건 일단 그때 고민해 봐야겠습니다.
끝.
- From Joshua(2014.09.29)
'Programming > Lucene' 카테고리의 다른 글
Lucene 하위버전에서 5.x로 업그레이드 하기 (0) | 2016.09.26 |
---|---|
[Lucene] Index Merge 중 에러 (0) | 2015.06.03 |
댓글