hibenate search--다 중 조건 검색

7411 단어 JavaWeb
hibenate search 는 다 중 조합 조건 을 통 해 다 중 조건 조 회 를 실현 할 수 있 습 니 다.다 중 조건 조회 의 실천 을 간단하게 소개 합 니 다.만약 단일 조건 조회 일 뿐 이 라면,이 조 회 는 매우 간단 할 수 있다.
luceneQuery = queryBuilder.keyword().onFields("title", "content").matching(query.getKeyword()).createQuery()

여러 조건 으로 조회 하려 면 Must Join 에 사용 해 야 합 니 다.여러 조건 이나 조회 라면 should Join 을 사용 해 야 합 니 다.여기 Must Join 의 예 를 들 어 보 겠 습 니 다.
//must true
MustJunction term = queryBuilder.bool().must(queryBuilder.keyword()
                   .onFields("title", "content")     .matching(query.getKeyword()).createQuery());
//must false
 term.must(queryBuilder.keyword()
                            .onField("status")                         .matching(query.getExcludeStatus()).createQuery()).not();

전체 예:
private FullTextQuery findByKeywordQuery(TopicQuery query) {
        FullTextSession fullTextSession = Search
                .getFullTextSession(getSession());


        QueryBuilder queryBuilder = fullTextSession.getSearchFactory()
                .buildQueryBuilder().forEntity(Topic.class).get();
        org.apache.lucene.search.Query luceneQuery = null;
        if (null == query.getStatus() && null == query.getUsername() && null == query.getExcludeStatus()) {
            luceneQuery = queryBuilder.keyword()// .wildcard()
                    .onFields("title", "content").matching(query.getKeyword())
                    // .matching("*" + query.getKeyword() + "*")
                    .createQuery();
            if(LOG.isDebugEnabled()){
                LOG.debug("create clean keyword search query: " + luceneQuery.toString());
            }
        } else {
           MustJunction term = queryBuilder.bool().must(queryBuilder.keyword()
                   .onFields("title", "content")     .matching(query.getKeyword()).createQuery());
           if(null != query.getStatus()){
               term.must(queryBuilder.keyword()
                            // .wildcard()
                            .onField("status")
                            .matching(query.getStatus()).createQuery());
           }
           if(null != query.getExcludeStatus()){
               term.must(queryBuilder.keyword()
                            .onField("status")
                            .matching(query.getExcludeStatus()).createQuery()).not();
           }
           if(null != query.getUsername()){
               term.must(queryBuilder.keyword()
                            // .wildcard()
                            .onField("owner.username")
                             .ignoreFieldBridge()
                            .matching(query.getUsername()).createQuery());
           }
           luceneQuery =term.createQuery();
           if(LOG.isDebugEnabled()){
               LOG.debug("create complicated keyword search query: " + luceneQuery.toString());
           }
        }
        // BooleanQuery
        FullTextQuery hibernateQuery = fullTextSession.createFullTextQuery(
                luceneQuery, Topic.class);
        return hibernateQuery;
    }

좋은 웹페이지 즐겨찾기