오랜만에 개인적으로 뭘 만드느라고 다시 루씬을 만졌는데..
2.9가 릴리즈 되어 있어서
냉큼 받아서 사용하려고 해보니
많이 바뀌었네요 --;;;;
3.0으로 넘어가기 위한 준비인가....
검색 하려면 아래와 같이..
기본적인 모양새는 2.4 랑 비슷한데
Collector가 전부 다 뒤집어졌네요.
create메서드의 boolean 값들은 뭐가 뭔지도 잘 모르겠다는 --;;
필드 정렬은 TopFieldCollector를 사용하고 일반적인 Score에 의한 검색은 TopScoreDocCollector 를 사용하는 것 같습니다.
TopFeildCollector의 create 메서드인데..
Sort는 정렬 할 때 사용하는 sort
numHits는 몇개 가져 올 것인지... 어차피 정렬이니 내부적으로는 다 가져오겠죠..
fillFields는 true일 경우 정렬에 사용된 필드의 값을 가져오는 것 같습니다.
위 구문을 nullpointerexception을 발생시킵니다.
trakcDocScores는 각 doc의 점수를 가져 올 것인지... 저게 false이면
hits[i].score 가 NaN으로 나옵니다.
trackMaxScore는 최고 점수를 가져 올 것인지..
docsScoredInOrder는 collector에 Score 를 set 할 수 있는데
그것과 연관이 있는 것 같습니다.
뭐가 이렇게 어려워졌니 --;;;
저 boolean 설정 값에 따라 내부적으로
여러가지 Collector를 생성해서 넘겨주게 되어있네요..
종류도 겁나 많다는 --;
잠깐 쓸라고 봤다가 여기저기 많이 뒤졌네요 헐..
2.9가 릴리즈 되어 있어서
냉큼 받아서 사용하려고 해보니
많이 바뀌었네요 --;;;;
3.0으로 넘어가기 위한 준비인가....
검색 하려면 아래와 같이..
SortField sf = new SortField("count", SortField.LONG, true);
Sort sort = new Sort(sf);
Directory dir = FSDirectory.open(new File("d:/index"));
IndexSearcher searcher = new IndexSearcher(IndexReader.open(dir, true));
TopFieldCollector collector = TopFieldCollector.create(sort, 60, false, true, false, false);
searcher.search(resultQuery, collector);
TopDocs top = collector.topDocs();
int result = top.totalHits; //총 검색 결과
for(int i = 0; i < 50 && i < collector.getTotalHits(); i++) {
Document doc = searcher.doc(hits[i].doc);
}
Sort sort = new Sort(sf);
Directory dir = FSDirectory.open(new File("d:/index"));
IndexSearcher searcher = new IndexSearcher(IndexReader.open(dir, true));
TopFieldCollector collector = TopFieldCollector.create(sort, 60, false, true, false, false);
searcher.search(resultQuery, collector);
TopDocs top = collector.topDocs();
int result = top.totalHits; //총 검색 결과
for(int i = 0; i < 50 && i < collector.getTotalHits(); i++) {
Document doc = searcher.doc(hits[i].doc);
}
기본적인 모양새는 2.4 랑 비슷한데
Collector가 전부 다 뒤집어졌네요.
create메서드의 boolean 값들은 뭐가 뭔지도 잘 모르겠다는 --;;
필드 정렬은 TopFieldCollector를 사용하고 일반적인 Score에 의한 검색은 TopScoreDocCollector 를 사용하는 것 같습니다.
public static TopFieldCollector create(Sort sort, int numHits,
boolean fillFields, boolean trackDocScores, boolean trackMaxScore,
boolean docsScoredInOrder)
throws IOException
boolean fillFields, boolean trackDocScores, boolean trackMaxScore,
boolean docsScoredInOrder)
throws IOException
TopFeildCollector의 create 메서드인데..
Sort는 정렬 할 때 사용하는 sort
numHits는 몇개 가져 올 것인지... 어차피 정렬이니 내부적으로는 다 가져오겠죠..
fillFields는 true일 경우 정렬에 사용된 필드의 값을 가져오는 것 같습니다.
FieldDoc fd = (FieldDoc)hits[i];
System.out.println(fd.fields[0]);
이런식으로 해당 필드의 값을 가져 올 수 있는데요 저 값이 false이면System.out.println(fd.fields[0]);
위 구문을 nullpointerexception을 발생시킵니다.
trakcDocScores는 각 doc의 점수를 가져 올 것인지... 저게 false이면
hits[i].score 가 NaN으로 나옵니다.
trackMaxScore는 최고 점수를 가져 올 것인지..
docsScoredInOrder는 collector에 Score 를 set 할 수 있는데
그것과 연관이 있는 것 같습니다.
뭐가 이렇게 어려워졌니 --;;;
저 boolean 설정 값에 따라 내부적으로
여러가지 Collector를 생성해서 넘겨주게 되어있네요..
종류도 겁나 많다는 --;
잠깐 쓸라고 봤다가 여기저기 많이 뒤졌네요 헐..