Lucene 입문 노트 4 - 검색 결과를 정렬합니다.

2735 단어
자세히 보기
검색 결과 정렬
 
1. 어떤 경우에 우리는 검색 결과의 정렬 방식을 사용자 정의해야 한다. 예를 들어 전자상거래 사이트에서 요구할 수 있고 검색된 상품에 대해'판매량','가격','호평수'등에 따라 정렬해야 한다.
 
2. Sort 클래스를 사용하여 정렬 방법 사용자 정의
   Sort sort = new Sort();
Sort 객체가 인스턴스화되면 여러 정렬 필드를 설정할 수 있습니다.
   Sort.setSort(SortField field...) ,예:
SortField field = new SortField("id", SortField.LONG)//id를 오름차순(기본값)으로 정렬함을 나타냅니다.
//내림차순으로 정렬:
      SortField field = new SortField("id", SortField.LONG, true).//true는 정렬 결과를 표시합니다. 기본값은 오름차순입니다. 반전하면 내림차순입니다.
 
3. 테스트 코드:
/*         《Lucene-    CRUD API   》   save    */
public class SortTest {
        @Test
	public void test() throws Exception {
		//     
		String queryString = "  ";
		// =================================================================
		// a,         Query  
		QueryParser queryParser = new QueryParser(Version.LUCENE_30, "content", Configuration.getAnalyzer());
		Query query = queryParser.parse(queryString);
		// b,   ,      
		IndexSearcher indexSearcher = new IndexSearcher(Configuration.getDirectory());
		// --------------------------------------------
		//        ,         ORDER BY
		// TopDocs topDocs = indexSearcher.search(query, 100); //    100   
		// TopDocs topDocs = indexSearcher.search(query, filter, n);
		// TopDocs topDocs = indexSearcher.search(query, filter, n, sort); //    filter       null
		// Sort sort = new Sort(new SortField("id", SortField.LONG)); //  id    
		Sort sort = new Sort(new SortField("id", SortField.LONG, true)); //  id    ,         ,     SortField
		//sort.setSort(fields...)  //       
		TopDocs topDocs = indexSearcher.search(query, null, 100, sort);
		// --------------------------------------------
		ScoreDoc[] scoreDocs = topDocs.scoreDocs; //  n      
		// c,     
		List
list = new ArrayList
(); for (int i = 0; i < scoreDocs.length; i++) { ScoreDoc scoreDoc = scoreDocs[i]; // 1, Document doc = indexSearcher.doc(scoreDoc.doc); // 2, Document list.add(ArticleDocumentUtils.document2Article(doc));// 3, Document Article } // ================================================================= // for (Article article : list) { System.out.println("-------> id = " + article.getId()); System.out.println("title = " + article.getTitle()); System.out.println("content = " + article.getContent()); } } }

 

좋은 웹페이지 즐겨찾기