본질적으로 페이지 매김을 지원하지 않으므로 Lucene에서 페이지 매김을 달성하는 방법을 알고 싶습니다. 기본적으로 '상위 10 개 항목'(일부 매개 변수 기반)과 '다음 10 개 항목'등을 검색해야합니다. 그리고 동시에 Lucene이 기억을 부추길 원하지 않습니다. 조언이 있으면 좋을 것 같습니다. 미리 감사드립니다. lucene에서 페이지 매김을 달성하는 방법은 무엇입니까?
답변
다음과 비슷한 자체 페이징 메커니즘을 적용해야합니다.
IList<Document> luceneDocuments = new List<Document>();
IndexReader indexReader = new IndexReader(directory);
Searcher searcher = new IndexSearcher(indexReader);
TopDocs results = searcher.Search("Your Query", null, skipRecords + takeRecords);
ScoreDoc[] scoreDocs = results.scoreDocs;
for (int i = skipRecords; i < results.totalHits; i++)
{
if (i > (skipRecords + takeRecords) - 1)
{
break;
}
luceneDocuments.Add(searcher.Doc(scoreDocs[i].doc));
}
당신은 searcher.Doc 메소드가 호출 될 때까지 인덱스에 포함 된 데이터가 실제로 사용되지 않기 때문에 scoreDocs 배열을 반복하는 경량 될 것입니다 찾을 수 있습니다.
이 예제는 Lucene.NET 2.3.2의 약간 수정 된 버전에 대해 작성된 것이지만 기본 원칙은 모든 최신 버전의 Lucene에 대해 작동해야합니다.
동의 Lucene의 결과는 데이터베이스 질의시 결과만큼 큼지 않으므로 성능 문제를 다루지 않고도 사용자 정의 페이지 매김 메소드를 쉽게 구현할 수 있습니다. –
더 많은 페이지 번호 매김을 가진 큰 데이터 세트를 검색 할 때 검색 속도가 느려집니다 . 그것은 당신이 물건을 찾은 다음 검색의 일부를 생략하는 것과 같습니다. – Ruwantha
Kane의 코드 스 니펫으로 계속 진행되는 또 다른 루프 버전입니다.
....................
ScoreDoc[] scoreDocs = results.scoreDocs;
int pageIndex = [User Value];
int pageSize = [Configured Value];
int startIndex = (pageIndex - 1) * pageSize;
int endIndex = pageIndex * pageSize;
endIndex = results.totalHits < endIndex? results.totalHits:endIndex;
for (int i = startIndex ; i < endIndex ; i++)
{
luceneDocuments.Add(searcher.Doc(scoreDocs[i].doc));
}
다음과 같은 방법으로 페이지 매기기를 사용하면 도움이 될 수 있습니다. 특히 실적 관점에서 더 나은 전략을 알고 있다면 공유하십시오.
public TopDocs search(String query, int pageNumber) throws IOException, ParseException {
Query searchQuery = parser.parse(query);
TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true);
int startIndex = (pageNumber - 1) * MyApp.SEARCH_RESULT_PAGE_SIZE;
searcher.search(searchQuery, collector);
TopDocs topDocs = collector.topDocs(startIndex, MyApp.SEARCH_RESULT_PAGE_SIZE);
return topDocs;
}
- 1. 페이지 매김을 달성하는 방법은 무엇입니까?
- 2. 페이지 매김을 구현하는 방법은 무엇입니까?
- 3. JSP에서 페이지 매김을 수행하는 방법은 무엇입니까?
- 4. WordPress에 페이지 매김을 추가하는 방법은 무엇입니까?
- 5. 아약스 페이지 매김을 선호합니까?
- 6. IFrame에서 페이지 매김을 적용하는 방법
- 7. RoR은 페이지 매김을 제공합니까?
- 8. 이 메뉴를 달성하는 방법은 무엇입니까?
- 9. 고 가용성을 달성하는 방법은 무엇입니까?
- 10. CSS로이 레이아웃을 달성하는 방법은 무엇입니까?
- 11. 클래스 기반 일반 뷰에서 페이지 매김을 사용하는 방법은 무엇입니까?
- 12. 앱 엔진에서 Google 스타일의 페이지 매김을 구현하는 방법은 무엇입니까?
- 13. 특정 조건을 선택한 경우보기 데이터에 페이지 매김을 적용하는 방법은 무엇입니까?
- 14. Magento 특별 가격 페이지에 페이지 매김을 포함시키는 방법은 무엇입니까?
- 15. Freemarker 및 Spring을 사용하여 페이지 매김을 수행하는 방법은 무엇입니까?
- 16. 페이지 매김을 사용하여 특정 게시물의 하위 게시물을 표시하는 방법은 무엇입니까?
- 17. drupal 페이지 매김을 수정하기위한 theme_pager
- 18. MongoDB는 페이지 매김을 가지고 있습니까?
- 19. WeekArchiveView에 페이지 매김을 적용하려면 어떻게해야합니까?
- 20. PHP에서 페이지 매김을 어떻게 구현합니까?
- 21. Lucene에서 자체 UID를 구현하는 방법은 무엇입니까?
- 22. Lucene에서 용어의 오프셋을 얻는 방법은 무엇입니까?
- 23. WPF에서 Image.Clone()을 달성하는 방법은 무엇입니까?
- 24. jQuery에서 변수 ++을 달성하는 방법은 무엇입니까?
- 25. 효과적인 Java 특성을 달성하는 방법은 무엇입니까?
- 26. 독립적 인 복제 TADODataSet을 달성하는 방법은 무엇입니까?
- 27. 페이지 매김을 선언하는 추상 ADO.NET 인터페이스가 있습니까?
- 28. 리디렉션 RegEx가 WordPress 페이지 매김을 방해 함
- 29. (Wordpress) 페이지 매김을 감지하는 전역 변수?
- 30. ASP.Net : Repeater로 페이지 매김을 수행하는 방법?
확인이 게시물의 승인 답 : [루씬 4 매김] [1] 가 [1] : http://stackoverflow.com/a/24533377/1080485 –