[Lucene] 3.5에서 4.9로 업그레이드 시 고려사항

Programming/Lucene 2014.09.29 댓글 Joshua95

사용하던 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

댓글