2014-11-02 2 views
0

아래 코드는 제대로 작동하지만 두 클래스 (UserEnt 및 BookEnt)에서 40 클래스까지 지원해야합니다. 성능을 향상시키기 위해 사용자가 검색 할 클래스를 선택할 수 있도록 허용합니다. 즉, createFullTextQuery 메서드의 클래스는 선택에 따라 동적으로 선언되어야합니다. 이것이 가능한가? 그렇지 않으면 createFullTextQuery에서 40 개의 클래스를 선언해야한다.최대 절전 모드 검색 : 동적으로 검색 가능한 클래스 정의

// LUCENE SEARCH 
    String[] fields = {"firstName", "lastName", "name"}; 
    QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_34, 
    fields, new StandardAnalyzer(Version.LUCENE_34)); 

    org.apache.lucene.search.Query luceneQuery = null; 
    try { 
    luceneQuery = parser.parse(s); 
    } 
    catch (ParseException e) { 
     throw new RuntimeException("Unable to parse query: " + s, e); 
    } 

    // HIBERNATE SEARCH WRAP 

    FullTextEntityManager ftEm = Search.getFullTextEntityManager(em); 
    javax.persistence.Query query = ftEm.createFullTextQuery(luceneQuery, 
              UserEnt.class, BookEnt.class); 

    List <?> results = query.getResultList(); 

    System.out.println("Records found:"+results.size()); 

답변

1

첫 번째 필수 매개 변수를 한 다음 옵션가 검색 할 모든 유형을 나열하는 매개 변수를 변수 인수 createFullTextQuery(..) 방법.

알려진 유형의 모든 엔티티를 대상으로 지정하기 위해이 유형을 간단히 생략 할 수 있습니다. 명시 적으로 유형을 나열

FullTextEntityManager ftEm = Search.getFullTextEntityManager(em); 
javax.persistence.Query query = ftEm.createFullTextQuery(luceneQuery); 

필터링의 한 형태이다, 그러나 당신은 또한 다른 기준에 결과를 제한하기 위해 사용자 정의 FullTextFilter 롤, 여전히 알려진 모든 유형을 나열 할 필요가 없습니다에 타겟팅 할 수 있습니다.

관련 문제