Java 类org.hibernate.search.FullTextQuery 实例源码

项目:Mastering-Java-EE-Development-with-WildFly    文件:SearchTestCase.java   
private List<Post> findPosts() {
    try {
        FullTextSession fullTextSession = getFullTextSession((Session) entityManager.getDelegate());
        Builder builder = new Builder();
        String[] fields = new String[] { "message.text", "topic.subject" };
        MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StandardAnalyzer());
        builder.add(parser.parse(POST_TEXT), MUST);
        builder.add(new TermQuery(new Term("topic.forum.id", "0")), MUST);
        builder.add(new TermQuery(new Term("topic.forum.category.id", "0")), MUST);
        builder.add(new WildcardQuery(new Term("poster.userId", "root")), MUST);
        addPostTimeQuery(builder);
        FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(builder.build(), Post.class);
        fullTextQuery.setSort(getSort());
        fullTextQuery.setFirstResult(0);
        fullTextQuery.setMaxResults(15);
        @SuppressWarnings("unchecked")
        List<Post> posts = fullTextQuery.list();
        return posts;
    } catch (ParseException e) {
        logger.severe("error");
        return null;
    }
}
项目:mblog    文件:PostDaoImpl.java   
@Override
@SuppressWarnings("unchecked")
public List<PostPO> searchByTag(Paging paigng, String tag) {
    FullTextSession fullTextSession = Search.getFullTextSession(super.session());
    SearchFactory sf = fullTextSession.getSearchFactory();
    QueryBuilder qb = sf.buildQueryBuilder().forEntity(PostPO.class).get();
    org.apache.lucene.search.Query luceneQuery  = qb.phrase().onField("tags").sentence(tag).createQuery();

    FullTextQuery query = fullTextSession.createFullTextQuery(luceneQuery);
    query.setFirstResult(paigng.getFirstResult());
    query.setMaxResults(paigng.getMaxResults());

    Sort sort = new Sort(new SortField("id", SortField.Type.LONG, true));
    query.setSort(sort);

    paigng.setTotalCount(query.getResultSize());

    return query.list();
}
项目:spring-scaffy    文件:SessionHibernateSearchDao.java   
@SuppressWarnings("unchecked")
public <T> List<T> executeSearchQuery(
        RestSearchKey key,
        Class<T> typeClass,
        FullTextSession fullTextEntityManager,
        QueryBuilder queryBuilder,
        Map<String, Query> crtsMap
        ) {

    FullTextQuery fullTextQuery = createFullTextQuery(typeClass,
            fullTextEntityManager, queryBuilder, crtsMap);

    if(key.hasOrders()){

        hibernateSearchBuilder.defineOrder(key, fullTextQuery);
    }

    hibernateSearchBuilder.definePaging(key, fullTextQuery);

    return fullTextQuery.list(); 

}
项目:spring-scaffy    文件:SessionHibernateSearchDao.java   
private <T> FullTextQuery createFullTextQuery(Class<T> typeClass,
        FullTextSession fullTextSession,
        QueryBuilder queryBuilder, Map<String, Query> crtsMap) {
    BooleanJunction<?> booleanJunction = hibernateSearchBuilder.createFinalBooleanJunction(
            queryBuilder, crtsMap);

    FullTextQuery fullTextQuery = null;

    if(booleanJunction == null){
        fullTextQuery =
        fullTextSession.createFullTextQuery(queryBuilder.all().createQuery(), typeClass);
    } else {

        fullTextQuery =
        fullTextSession.createFullTextQuery(
                booleanJunction.createQuery(), typeClass);
    }
    return fullTextQuery;
}
项目:JForum    文件:SearchRepository.java   
@SuppressWarnings("unchecked")
public SearchResult search(SearchParams params) throws ParseException {
    String buildQuery = params.buildQuery();
    FullTextQuery query = this.createQuery(buildQuery);

    query.setFirstResult(params.getStart());
    query.setMaxResults(params.getMaxResults());
    query.setFetchSize(params.getMaxResults());

    if (params.getSort() == SearchSort.DATE) {
        query.setSort(new Sort(new SortField("date", params.getSortType() == SearchSortType.DESC)));
    }
    else if (params.getSort() == SearchSort.RELEVANCE) {
        query.setSort(Sort.RELEVANCE);
    }

    return new SearchResult(query.list(), query.getResultSize());
}
项目:debop4j    文件:SearchDaoImpl.java   
@Override
public <T> List<T> findAll(Class<T> clazz, Query luceneQuery, int firstResult, int maxResults, Sort sort, Criteria criteria) {
    if (isTraceEnabled)
        log.trace("엔티티 조회. clazz=[{}], luceneQuery=[{}], fitstResult=[{}], maxResults=[{}], sort=[{}], criteria=[{}]",
                  clazz, luceneQuery, firstResult, maxResults, sort, criteria);

    if (luceneQuery == null)
        luceneQuery = getQueryBuilder(clazz).all().createQuery();

    FullTextQuery ftq = getFullTextQuery(luceneQuery, clazz);
    HibernateTool.setPaging(ftq, firstResult, maxResults);
    if (sort != null) ftq.setSort(sort);
    if (criteria != null) ftq.setCriteriaQuery(criteria);

    return ftq.list();
}
项目:debop4j    文件:SearchDaoImpl.java   
@Override
public <T> PaginatedList<T> getPage(Class<T> clazz, Query luceneQuery, int pageNo, int pageSize, Sort sort, Criteria criteria) {
    if (isDebugEnabled)
        log.debug("엔티티 조회. clazz=[{}], luceneQuery=[{}], pageNo=[{}], pageSize=[{}], sort=[{}], criteria=[{}]",
                  clazz, luceneQuery, pageNo, pageSize, sort, criteria);

    if (luceneQuery == null)
        luceneQuery = getQueryBuilder(clazz).all().createQuery();

    int itemCount = count(clazz, luceneQuery);

    FullTextQuery ftq = getFullTextQuery(luceneQuery, clazz);
    HibernateTool.setPaging(ftq, (pageNo - 1) * pageSize, pageSize);
    if (sort != null) ftq.setSort(sort);
    if (criteria != null) ftq.setCriteriaQuery(criteria);

    List<T> list = ftq.list();
    return new PaginatedList<>(list, pageNo, pageSize, itemCount);
}
项目:debop4j    文件:HibernateSearchDao.java   
@Override
public <T> List<T> findAll(Class<T> clazz, Query luceneQuery, int firstResult, int maxResults, Sort sort, Criteria criteria) {
    if (isTraceEnabled)
        log.trace("엔티티 조회. clazz=[{}], luceneQuery=[{}], fitstResult=[{}], maxResults=[{}], sort=[{}], criteria=[{}]",
                  clazz, luceneQuery, firstResult, maxResults, sort, criteria);

    if (luceneQuery == null)
        luceneQuery = getQueryBuilder(clazz).all().createQuery();

    FullTextQuery ftq = getFullTextQuery(luceneQuery, clazz);
    HibernateTool.setPaging(ftq, firstResult, maxResults);
    if (sort != null) ftq.setSort(sort);
    if (criteria != null) ftq.setCriteriaQuery(criteria);

    return ftq.list();
}
项目:debop4j    文件:HibernateSearchDao.java   
@Override
public <T> PaginatedList<T> getPage(Class<T> clazz, Query luceneQuery, int pageNo, int pageSize, Sort sort, Criteria criteria) {
    if (isDebugEnabled)
        log.debug("엔티티 조회. clazz=[{}], luceneQuery=[{}], pageNo=[{}], pageSize=[{}], sort=[{}], criteria=[{}]",
                  clazz, luceneQuery, pageNo, pageSize, sort, criteria);

    if (luceneQuery == null)
        luceneQuery = getQueryBuilder(clazz).all().createQuery();

    long itemCount = count(clazz, luceneQuery);

    FullTextQuery ftq = getFullTextQuery(luceneQuery, clazz);
    HibernateTool.setPaging(ftq, (pageNo - 1) * pageSize, pageSize);
    if (sort != null) ftq.setSort(sort);
    if (criteria != null) ftq.setCriteriaQuery(criteria);

    List<T> list = ftq.list();
    return new PaginatedList<>(list, pageNo, pageSize, itemCount);
}
项目:debop4j    文件:MockingTest.java   
@Test
public void searchTest() throws Exception {
    FullTextQuery ftq = createMock(FullTextQuery.class);
    FullTextSession fts = createMock(FullTextSession.class);
    SearchFactory factory = createMock(SearchFactory.class);

    expect(fts.getSearchFactory()).andReturn(factory);
    expect(factory.getAnalyzer(Item.class)).andReturn(new StandardAnalyzer(Version.LUCENE_36));
    expect(fts.createFullTextQuery(isA(Query.class), eq(Item.class))).andReturn(ftq);

    expect(ftq.setProjection("title")).andReturn(ftq);

    List<Object[]> results = new ArrayList<Object[]>();
    results.add(new Object[] { "The Incredibles" });
    expect(ftq.list()).andReturn(results);

    replay(factory);
    replay(ftq);
    replay(fts);

}
项目:debop4j    文件:FuzzyQueryTest.java   
@Test
public void testFuzzyQuery() throws Exception {

    buildIndex(fts);

    try {
        String userInput = "title";
        FuzzyQuery luceneQuery = new FuzzyQuery(new Term("title", userInput), 0.4f);

        log.debug("Query=" + luceneQuery.toString());

        FullTextQuery ftq = fts.createFullTextQuery(luceneQuery, Dvd.class);
        List<Dvd> results = ftq.list();

        Assertions.assertThat(results.size()).isEqualTo(5);
        // Assertions.assertThat(results.get(0).getTitle()).isEqualTo(titles[0]);

        for (Dvd dvd : results) {
            log.debug("Title=" + dvd.getTitle());
        }
    } finally {
        for (Object element : fts.createQuery("from " + Dvd.class.getName()).list()) {
            fts.delete(element);
        }
    }
}
项目:debop4j    文件:TestSalesmanSearch.java   
@Test
public void searchProduct() throws Exception {
    Transaction tx = fts.beginTransaction();

    Query query = new TermQuery(new Term("description", "salesman"));
    log.debug("query=" + query.toString());

    FullTextQuery ftq = fts.createFullTextQuery(query, Product.class);
    ftq.setProjection(FullTextQuery.DOCUMENT,
                      FullTextQuery.SCORE,
                      FullTextQuery.DOCUMENT_ID,
                      FullTextQuery.EXPLANATION);

    List<Object[]> results = ftq.list();


    tx.commit();
}
项目:debop4j    文件:HibernateOgmDao.java   
@Override
public <T> List<T> find(Class<T> clazz, Query luceneQuery, int firstResult, int maxResults, Sort luceneSort, Criteria criteria) {
    if (isTraceEnabled)
        log.trace("엔티티 조회. clazz=[{}], luceneQuery=[{}], fitstResult=[{}], maxResults=[{}], sort=[{}], criteria=[{}]",
                  clazz, luceneQuery, firstResult, maxResults, luceneSort, criteria);

    if (luceneQuery == null)
        luceneQuery = getQueryBuilder(clazz).all().createQuery();

    FullTextQuery ftq = getFullTextQuery(luceneQuery, clazz);
    HibernateTool.setPaging(ftq, firstResult, maxResults);

    if (luceneSort != null)
        ftq.setSort(luceneSort);
    if (criteria != null)
        ftq.setCriteriaQuery(criteria);

    return ftq.list();
}
项目:debop4j    文件:HibernateOgmDao.java   
@Override
public List<Object[]> findProjections(Class<?> clazz, Query luceneQuery, String[] fields,
                                      int firstResult, int maxResults, Sort luceneSort, Criteria criteria) {
    shouldNotBeNull(fields, "fields");
    Guard.shouldBe(fields.length > 0, "조회할 필드 수가 있어야합니다.");

    if (isTraceEnabled)
        log.trace("Project 조회. clazz=[{}], luceneQuery=[{}], fields=[{}], firstResult=[{}], maxResults=[{}], luceneSort=[{}], criteria=[{}]",
                  clazz, luceneQuery, StringTool.listToString(fields), firstResult, maxResults, luceneSort, criteria);

    if (luceneQuery == null)
        luceneQuery = getQueryBuilder(clazz).all().createQuery();

    FullTextQuery ftq = getFullTextQuery(luceneQuery, clazz);
    HibernateTool.setPaging(ftq, firstResult, maxResults);
    ftq.setProjection(fields);

    if (luceneSort != null)
        ftq.setSort(luceneSort);
    if (criteria != null)
        ftq.setCriteriaQuery(criteria);

    return ftq.list();
}
项目:debop4j    文件:HibernateOgmDao.java   
@Override
public <T> IPagedList<T> getPage(Class<T> clazz, Query luceneQuery, int pageNo, int pageSize, Sort luceneSort, Criteria criteria) {

        log.trace("엔티티 페이징 조회. clazz=[{}], luceneQuery=[{}], pageNo=[{}], pageSize=[{}], sort=[{}], criteria=[{}]",
                  clazz, luceneQuery, pageNo, pageSize, luceneSort, criteria);

    long totalCount = count(clazz, luceneQuery);
    FullTextQuery ftq = this.getFullTextQuery(luceneQuery, clazz);

    HibernateTool.setPaging(ftq, (pageNo - 1) * pageSize, pageSize);

    if (luceneSort != null)
        ftq.setSort(luceneSort);
    if (criteria != null)
        ftq.setCriteriaQuery(criteria); // fetching strategy 같은 겻을 제공할 수 있다.

    return new PaginatedList<T>(ftq.list(), pageNo, pageSize, totalCount);
}
项目:oscm    文件:SearchServiceBean.java   
/**
 * Performs a search in Lucene and puts the resulting product object ids in
 * a corresponding map.
 * 
 * @param query
 *            the Lucene query
 * @param fts
 *            the Hibernate Search FullTextSession
 * @param map
 *            the map for the search results
 * @throws HibernateException
 */
private void searchViaLucene(org.apache.lucene.search.Query query,
        FullTextSession fts, LinkedHashMap<Long, VOService> map)
        throws HibernateException {
    FullTextQuery ftQuery = fts.createFullTextQuery(query, Product.class);
    ftQuery.setProjection("key");
    List<?> result = ftQuery.list();
    if (result != null) {
        for (Object item : result) {
            map.put((Long) ((Object[]) item)[0], null);
        }
    }
}
项目:mblog    文件:PostDaoImpl.java   
@Override
@SuppressWarnings("unchecked")
public List<Post> search(Paging paging, String q) throws Exception {
    FullTextSession fullTextSession = Search.getFullTextSession(super.session());
    SearchFactory sf = fullTextSession.getSearchFactory();
    QueryBuilder qb = sf.buildQueryBuilder().forEntity(PostPO.class).get();

    org.apache.lucene.search.Query luceneQuery  = qb.keyword().onFields("title","summary","tags").matching(q).createQuery();

    FullTextQuery query = fullTextSession.createFullTextQuery(luceneQuery);
    query.setFirstResult(paging.getFirstResult());
    query.setMaxResults(paging.getMaxResults());

    StandardAnalyzer standardAnalyzer = new StandardAnalyzer();
    SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<span style='color:red;'>", "</span>");
       QueryScorer queryScorer = new QueryScorer(luceneQuery);
       Highlighter highlighter = new Highlighter(formatter, queryScorer);

    List<PostPO> list = query.list();
    List<Post> rets = new ArrayList<>(list.size());

    for (PostPO po : list) {
        Post m = BeanMapUtils.copy(po, 0);

        // 处理高亮
        String title = highlighter.getBestFragment(standardAnalyzer, "title", m.getTitle());
        String summary = highlighter.getBestFragment(standardAnalyzer, "summary", m.getSummary());

        if (StringUtils.isNotEmpty(title)) {
            m.setTitle(title);
        }
        if (StringUtils.isNotEmpty(summary)) {
            m.setSummary(summary);
        }
        rets.add(m);
    }

    paging.setTotalCount(query.getResultSize());
    return rets;
}
项目:document-management-system    文件:SearchDAO.java   
/**
 * Security is evaluated by Lucene, so query result are already pruned. This means that every node
 * should have its security (user and role) info stored in Lucene. This provides very quick search
 * but security modifications need to be recursively applied to reach every document node in the
 * repository. This may take several hours (or days) is big repositories.
 */
@SuppressWarnings("unchecked")
private NodeResultSet runQueryLucene(FullTextSession ftSession, Query query, int offset, int limit)
        throws IOException, InvalidTokenOffsetsException, HibernateException {
    log.debug("runQueryLucene({}, {}, {}, {})", new Object[]{ftSession, query, offset, limit});
    List<NodeQueryResult> results = new ArrayList<NodeQueryResult>();
    NodeResultSet result = new NodeResultSet();
    FullTextQuery ftq = ftSession.createFullTextQuery(query, NodeDocument.class, NodeFolder.class, NodeMail.class);
    ftq.setProjection(FullTextQuery.SCORE, FullTextQuery.THIS);
    ftq.enableFullTextFilter("readAccess");
    QueryScorer scorer = new QueryScorer(query, NodeDocument.TEXT_FIELD);

    // Set limits
    ftq.setFirstResult(offset);
    ftq.setMaxResults(limit);

    // Highlight using a CSS style
    SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<span class='highlight'>", "</span>");
    Highlighter highlighter = new Highlighter(formatter, scorer);
    highlighter.setTextFragmenter(new SimpleSpanFragmenter(scorer, MAX_FRAGMENT_LEN));

    for (Iterator<Object[]> it = ftq.iterate(); it.hasNext(); ) {
        Object[] qRes = it.next();
        Float score = (Float) qRes[0];
        NodeBase nBase = (NodeBase) qRes[1];

        // Add result
        addResult(ftSession, results, highlighter, score, nBase);
    }

    result.setTotal(ftq.getResultSize());
    result.setResults(results);
    log.debug("runQueryLucene: {}", result);
    return result;
}
项目:development    文件:SearchServiceBean.java   
/**
 * Performs a search in Lucene and puts the resulting product object ids in
 * a corresponding map.
 * 
 * @param query
 *            the Lucene query
 * @param fts
 *            the Hibernate Search FullTextSession
 * @param map
 *            the map for the search results
 * @throws HibernateException
 */
private void searchViaLucene(org.apache.lucene.search.Query query,
        FullTextSession fts, LinkedHashMap<Long, VOService> map)
        throws HibernateException {
    FullTextQuery ftQuery = fts.createFullTextQuery(query, Product.class);
    ftQuery.setProjection("key");
    List<?> result = ftQuery.list();
    if (result != null) {
        for (Object item : result) {
            map.put((Long) ((Object[]) item)[0], null);
        }
    }
}
项目:play    文件:Main.java   
@SuppressWarnings("unchecked")
@DataProvider
public List<SearchResult> search(String searchText) throws Exception {
    FullTextSession fullTextSession = Search.getFullTextSession(exampleDao
            .getSession());

    if (!indexRebuilded) {
        indexRebuilded = true;
        fullTextSession.createIndexer().startAndWait();
    }

    MultiFieldQueryParser parser = new MultiFieldQueryParser(
            Version.LUCENE_31, new String[] { "label", "tags", "url",
                    "summary" }, new StandardAnalyzer(Version.LUCENE_31));
    org.apache.lucene.search.Query luceneQuery = parser.parse(searchText);
    FullTextQuery query = fullTextSession.createFullTextQuery(luceneQuery,
            Example.class);
    query.setFirstResult(0);
    query.setMaxResults(100);

    List<SearchResult> searchResults = new ArrayList<SearchResult>();
    for (Example example : (List<Example>) query.list()) {
        SearchResult searchResult = new SearchResult();
        PropertyUtils.copyProperties(searchResult, example);
        searchResults.add(searchResult);
    }
    return searchResults;
}
项目:webdsl    文件:AbstractEntitySearcher.java   
public List<Float> scores( ){
    List<Float> toReturn = new ArrayList<Float>( );
    validateQuery( );
    fullTextQuery.setProjection( FullTextQuery.SCORE );
    for ( Object obj : fullTextQuery.list( ) ) {
        toReturn.add( ( Float ) ( (Object[] ) obj )[0] );
    };
    fullTextQuery.setProjection( FullTextQuery.THIS );
    return toReturn;

}
项目:webdsl    文件:AbstractEntitySearcher.java   
public List<String> explanations( ){
    List<String> toReturn = new ArrayList<String>( );
    validateQuery( );
    fullTextQuery.setProjection( FullTextQuery.EXPLANATION );
    for ( Object obj : fullTextQuery.list( ) ) {
        toReturn.add( ( (Explanation ) ( (Object[] ) obj )[0] ).toHtml( ) );
    };
    fullTextQuery.setProjection( FullTextQuery.THIS );
    return toReturn;

}
项目:JForum    文件:SearchRepository.java   
private FullTextQuery createQuery(String criteria) throws ParseException {
    // FIXME: Should not hardcode the analyzer
    QueryParser parser = new QueryParser("text", new StandardAnalyzer());
    Query luceneQuery = parser.parse(criteria);

    return Search.createFullTextSession(session).createFullTextQuery(luceneQuery, Post.class);
}
项目:debop4j    文件:SearchDaoImpl.java   
@Override
public FullTextQuery getFullTextQuery(Query luceneQuery, Class<?>... entities) {

    FullTextQuery ftq = getFullTextSession().createFullTextQuery(luceneQuery, entities);

    /* hibernate-ogm 에서는 꼭 DatabaseRetrievalMethod.FIND_BY_ID 를 사용해야 합니다. */
    ftq.initializeObjectsWith(ObjectLookupMethod.SKIP, DatabaseRetrievalMethod.FIND_BY_ID);
    return ftq;
}
项目:debop4j    文件:SearchDaoImpl.java   
@Override
public <T> List<T> findAll(Class<T> clazz, Sort luceneSort) {
    if (isTraceEnabled)
        log.trace("엔티티[{}]의 모든 레코드를 조회합니다...", clazz);

    Query luceneQuery = getQueryBuilder(clazz).all().createQuery();
    FullTextQuery ftq = getFullTextQuery(luceneQuery, clazz);
    if (luceneSort != null)
        ftq.setSort(luceneSort);

    return ftq.list();
}
项目:debop4j    文件:SearchDaoImpl.java   
@Override
public List<Serializable> getAllIds(Class<?> clazz, Query luceneQuery, int firstResult, int maxResults, Sort sort, Criteria criteria) {
    List<Object[]> list = getProjections(clazz, luceneQuery, new String[] { FullTextQuery.ID }, firstResult, maxResults, sort, criteria);
    List<Serializable> ids = Lists.newArrayList();
    for (Object[] fields : list) {
        ids.add((Serializable) fields[0]);
    }
    return ids;
}
项目:debop4j    文件:SearchDaoImpl.java   
@Override
public PaginatedList<Serializable> getIdPage(Class<?> clazz, Query luceneQuery, int pageNo, int pageSize, Sort sort, Criteria criteria) {

    int totalCount = count(clazz, luceneQuery);
    List<Object[]> list = getProjections(clazz, luceneQuery, new String[] { FullTextQuery.ID },
                                         (pageNo - 1) * pageSize, pageSize, sort, criteria);
    List<Serializable> ids = Lists.newArrayList();
    for (Object[] fields : list) {
        ids.add((Serializable) fields[0]);
    }
    return new PaginatedList<>(ids, pageNo, pageSize, totalCount);
}
项目:debop4j    文件:HibernateSearchDao.java   
@Override
public FullTextQuery getFullTextQuery(Query luceneQuery, Class<?>... entities) {

    FullTextQuery ftq = getFullTextSession().createFullTextQuery(luceneQuery, entities);

    /* hibernate-ogm 에서는 꼭 DatabaseRetrievalMethod.FIND_BY_ID 를 사용해야 합니다. */
    ftq.initializeObjectsWith(ObjectLookupMethod.SKIP, DatabaseRetrievalMethod.FIND_BY_ID);
    return ftq;
}
项目:debop4j    文件:HibernateSearchDao.java   
@Override
public <T> List<T> findAll(Class<T> clazz, Sort luceneSort) {
    if (isTraceEnabled)
        log.trace("엔티티[{}]의 모든 레코드를 조회합니다...", clazz);

    Query luceneQuery = getQueryBuilder(clazz).all().createQuery();
    FullTextQuery ftq = getFullTextQuery(luceneQuery, clazz);
    if (luceneSort != null)
        ftq.setSort(luceneSort);

    return ftq.list();
}
项目:debop4j    文件:HibernateSearchDao.java   
@Override
public List<Serializable> getAllIds(Class<?> clazz, Query luceneQuery, int firstResult, int maxResults, Sort sort, Criteria criteria) {
    List<Object[]> list = getProjections(clazz, luceneQuery, new String[]{ FullTextQuery.ID }, firstResult, maxResults, sort, criteria);
    List<Serializable> ids = Lists.newArrayList();
    for (Object[] fields : list) {
        ids.add((Serializable) fields[0]);
    }
    return ids;
}
项目:debop4j    文件:HibernateSearchDao.java   
@Override
public PaginatedList<Serializable> getIdPage(Class<?> clazz, Query luceneQuery, int pageNo, int pageSize, Sort sort, Criteria criteria) {

    long totalCount = count(clazz, luceneQuery);
    List<Object[]> list = getProjections(clazz, luceneQuery, new String[]{ FullTextQuery.ID },
                                         (pageNo - 1) * pageSize, pageSize, sort, criteria);
    List<Serializable> ids = Lists.newArrayList();
    for (Object[] fields : list) {
        ids.add((Serializable) fields[0]);
    }
    return new PaginatedList<>(ids, pageNo, pageSize, totalCount);
}
项目:debop4j    文件:SearchTool.java   
/**
 * FullTextQuery 인스턴스를 생성합니다.
 *
 * @param fts         FullTextSession instance.
 * @param luceneQuery the lucene query
 * @param clazz       the clazz
 * @return the full text query
 */
public static FullTextQuery createFullTextQuery(FullTextSession fts, Query luceneQuery, Class<?> clazz) {

    FullTextQuery ftq = fts.createFullTextQuery(luceneQuery, clazz);

    // 기본값이 SKIP, QUERY 입니다.
    // ftq.initializeObjectsWith(ObjectLookupMethod.SKIP, DatabaseRetrievalMethod.QUERY);
    return ftq;
}
项目:debop4j    文件:QueryParserTest.java   
@Test
public void testTermQuery() throws Exception {
    buildIndex(fts);

    Transaction tx = fts.beginTransaction();
    try {
        String userInput = "salesman";
        Term term = new Term("description", userInput);
        TermQuery query = new TermQuery(term);

        log.debug("query: " + query.toString());

        FullTextQuery ftq = fts.createFullTextQuery(query, Dvd.class);
        @SuppressWarnings("unchecked")
        List<Dvd> results = ftq.list();

        Assertions.assertThat(results.size()).isEqualTo(descs.length);
        Assertions.assertThat(results.get(0).getDescription()).isEqualTo(descs[1]);

        for (Dvd dvd : results) {
            log.debug("Dev: " + dvd.getDescription());
        }

        for (Object element : fts.createQuery("from " + Dvd.class.getName()).list()) {
            fts.delete(element);
        }
    } finally {
        tx.commit();
    }
}
项目:debop4j    文件:FuzzyQueryTest.java   
@Test
public void testKoreanFuzzyQuery() throws Exception {

    buildIndex(fts);

    try {
        //
        //TODO:  한글 분석기로는 FuzzyQuery가 제대로 작동하지 않는다.
        //
        String userInput = "포터";
        FuzzyQuery luceneQuery = new FuzzyQuery(new Term("title", userInput), 0.4f);

        log.debug("Query=" + luceneQuery.toString());

        FullTextQuery ftq = fts.createFullTextQuery(luceneQuery, Dvd.class);
        List<Dvd> results = ftq.list();

        // Assertions.assertThat(results.size()).isEqualTo(3);
        // Assertions.assertThat(results.get(0).getTitle()).isEqualTo(titles[7]);

        for (Dvd dvd : results) {
            log.debug("Title=" + dvd.getTitle());
        }
    } finally {
        for (Object element : fts.createQuery("from " + Dvd.class.getName()).list()) {
            fts.delete(element);
        }
    }
}
项目:debop4j    文件:PhraseQueryTest.java   
@Test
public void testPhaseQuery() throws Exception {
    buildIndex(fts);

    String userInput = "star trek";

    StringTokenizer st = new StringTokenizer(userInput, " ");
    PhraseQuery query = new PhraseQuery();
    while (st.hasMoreTokens()) {
        query.add(new Term("description", st.nextToken()));
    }
    log.debug("query=" + query.toString());

    FullTextQuery ftq = fts.createFullTextQuery(query, Dvd.class);
    List<Dvd> results = ftq.list();

    Assertions.assertThat(results.size()).isEqualTo(3);
    Assertions.assertThat(results.get(0).getDescription()).isEqualTo(descs[1]);

    for (Dvd dvd : results) {
        log.debug("Dvd=" + dvd);
    }

    for (Object element : fts.createQuery("from " + Dvd.class.getName()).list()) {
        fts.delete(element);
    }
}
项目:debop4j    文件:ProjectionQueryTest.java   
@Test
public void testLuceneObjectsProjectionWithScroll() throws Exception {
    buildIndex(fts);

    Transaction tx = fts.beginTransaction();
    QueryParser parser = new QueryParser(Version.LUCENE_36, "dept", new StandardAnalyzer(Version.LUCENE_36));
    Query query = parser.parse("dept:ITech");
    FullTextQuery ftq = fts.createFullTextQuery(query, Employee.class);
    ftq.setProjection("id", "lastname", "dept",
                      FullTextQuery.THIS,
                      FullTextQuery.SCORE,
                      FullTextQuery.DOCUMENT,
                      FullTextQuery.ID);

    ScrollableResults projections = ftq.scroll();
    projections.beforeFirst();
    projections.next();
    Object[] projection = projections.get();

    assertThat(projection[0]).isEqualTo(1000);
    assertThat(projection[1]).isEqualTo("Griffin");
    assertThat(projection[2]).isEqualTo("ITech");
    assertThat(projection[3].hashCode()).isEqualTo(fts.get(Employee.class, 1000).hashCode());
    assertThat(projection[4]).isEqualTo(1.0F);
    assertThat(projection[5]).isInstanceOf(Document.class);
    assertThat(projection[6]).isEqualTo(1000);

    assertThat(projections.isFirst()).isTrue();
    assertThat(((Employee) projection[3]).getId()).isEqualTo(1000);

    for (Object element : fts.createQuery("from " + Employee.class.getName()).list())
        fts.delete(element);

    tx.commit();
}
项目:debop4j    文件:HibernateOgmDao.java   
@Override
public FullTextQuery getFullTextQuery(Query luceneQuery, Class<?>... entities) {
    if (isTraceEnabled)
        log.trace("FullTextQuery를 생성합니다... luceneQuery=[{}], entities=[{}]",
                  luceneQuery, StringTool.listToString(entities));

    FullTextQuery ftq = getFullTextSession().createFullTextQuery(luceneQuery, entities);

    // 필수!!! object lookup 및 DB 조회 방법 설정
    //
    ftq.initializeObjectsWith(ObjectLookupMethod.SKIP, DatabaseRetrievalMethod.FIND_BY_ID);
    return ftq;
}
项目:debop4j    文件:HibernateOgmDao.java   
@Override
public IPagedList<Serializable> getIdPage(Class<?> clazz, Query luceneQuery, int pageNo, int pageSize, Sort luceneSort, Criteria criteria) {
    IPagedList<Object[]> list = getProjectionPage(clazz, luceneQuery, new String[] { FullTextQuery.ID }, pageNo, pageSize, luceneSort, criteria);
    List<Serializable> ids = Lists.newArrayList();
    for (Object[] fields : list.getList()) {
        ids.add((Serializable) fields[0]);
    }
    return new PaginatedList<>(ids, pageNo, pageSize, list.getItemCount());
}
项目:debop4j    文件:SearchOnStandaloneOgmTest.java   
@Test
public void hibernateSearchUsage() throws Exception {
    final Session session = openSession();
    final FullTextSession fts = Search.getFullTextSession(session);
    Transaction transaction = fts.beginTransaction();

    int itemCount = 10000;
    for (int i = 0; i < itemCount; i++) {
        Insurance insurance = new Insurance();
        insurance.setName("Macif");
        fts.persist(insurance);
    }

    transaction.commit();
    fts.clear();

    transaction = fts.beginTransaction();
    final QueryBuilder b =
            fts.getSearchFactory()
                    .buildQueryBuilder()
                    .forEntity(Insurance.class)
                    .get();
    final Query lq = b.keyword().onField("name").matching("Macif").createQuery();
    final FullTextQuery ftq = fts.createFullTextQuery(lq, Insurance.class);
    ftq.initializeObjectsWith(ObjectLookupMethod.SKIP, DatabaseRetrievalMethod.FIND_BY_ID);
    final List<Insurance> results = ftq.list();

    Assertions.assertThat(results).hasSize(itemCount);
    for (Insurance o : results)
        fts.delete(o);

    transaction.commit();
    fts.close();
}
项目:bbks    文件:BaseDaoImpl.java   
/**
 * 全文检索
 * @param page 分页对象
 * @param query 关键字查询对象
 * @param queryFilter 查询过滤对象
 * @param sort 排序对象
 * @return 分页对象
 */
@SuppressWarnings("unchecked")
public Page<T> search(Page<T> page, BooleanQuery query, BooleanQuery queryFilter, Sort sort){

    // 按关键字查询
    FullTextQuery fullTextQuery = getFullTextSession().createFullTextQuery(query, entityClass);


    // 过滤无效的内容
    if(queryFilter != null){
        fullTextQuery.setFilter(new CachingWrapperFilter(new QueryWrapperFilter(queryFilter)));
    }


       // 按时间排序
    if(sort != null){
        fullTextQuery.setSort(sort);
    }

    // 定义分页
    page.setCount(fullTextQuery.getResultSize());
    fullTextQuery.setFirstResult(page.getFirstResult());
    fullTextQuery.setMaxResults(page.getMaxResults()); 

    // 先从持久化上下文中查找对象,如果没有再从二级缓存中查找
       fullTextQuery.initializeObjectsWith(ObjectLookupMethod.SECOND_LEVEL_CACHE, DatabaseRetrievalMethod.QUERY); 

    // 返回结果
    page.setList(fullTextQuery.list());

    return page;
}