Java tutorial
/** * Copyright © 2012-2013 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); */ package com.green.modules.cms.service; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.apache.lucene.index.Term; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.Sort; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TermRangeQuery; import org.apache.lucene.search.BooleanClause.Occur; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.google.common.collect.Lists; import com.green.common.persistence.Page; import com.green.common.service.BaseService; import com.green.modules.cms.dao.GuestbookDao; import com.green.modules.cms.entity.Guestbook; /** * Service * @author ThinkGem * @version 2013-01-15 */ @Service @Transactional(readOnly = true) public class GuestbookService extends BaseService { @Autowired private GuestbookDao guestbookDao; public Guestbook get(String id) { return guestbookDao.get(id); } public Page<Guestbook> find(Page<Guestbook> page, Guestbook guestbook) { DetachedCriteria dc = guestbookDao.createDetachedCriteria(); if (StringUtils.isNotEmpty(guestbook.getType())) { dc.add(Restrictions.eq("type", guestbook.getType())); } if (StringUtils.isNotEmpty(guestbook.getContent())) { dc.add(Restrictions.like("content", "%" + guestbook.getContent() + "%")); } dc.add(Restrictions.eq(Guestbook.FIELD_DEL_FLAG, guestbook.getDelFlag())); dc.addOrder(Order.desc("id")); return guestbookDao.find(page, dc); } @Transactional(readOnly = false) public void save(Guestbook guestbook) { guestbookDao.save(guestbook); } @Transactional(readOnly = false) public void delete(String id, Boolean isRe) { guestbookDao.updateDelFlag(id, isRe != null && isRe ? Guestbook.DEL_FLAG_AUDIT : Guestbook.DEL_FLAG_DELETE); } /** * */ public void createIndex() { guestbookDao.createIndex(); } /** * */ public Page<Guestbook> search(Page<Guestbook> page, String q, String beginDate, String endDate) { // ? BooleanQuery query = guestbookDao.getFullTextQuery(q, "name", "content", "reContent"); // ? List<BooleanClause> bcList = Lists.newArrayList(); bcList.add(new BooleanClause(new TermQuery(new Term(Guestbook.FIELD_DEL_FLAG, Guestbook.DEL_FLAG_NORMAL)), Occur.MUST)); if (StringUtils.isNotBlank(beginDate) && StringUtils.isNotBlank(endDate)) { bcList.add(new BooleanClause(new TermRangeQuery("createDate", beginDate.replaceAll("-", ""), endDate.replaceAll("-", ""), true, true), Occur.MUST)); } bcList.add(new BooleanClause(new TermQuery(new Term("type", "1")), Occur.SHOULD)); bcList.add(new BooleanClause(new TermQuery(new Term("type", "2")), Occur.SHOULD)); bcList.add(new BooleanClause(new TermQuery(new Term("type", "3")), Occur.SHOULD)); bcList.add(new BooleanClause(new TermQuery(new Term("type", "4")), Occur.SHOULD)); BooleanQuery queryFilter = guestbookDao .getFullTextQuery((BooleanClause[]) bcList.toArray(new BooleanClause[bcList.size()])); System.out.println(queryFilter); // ?? Sort sort = null;//new Sort(new SortField("updateDate", SortField.DOC, true)); // guestbookDao.search(page, query, queryFilter, sort); // guestbookDao.keywordsHighlight(query, page.getList(), 30, "name"); guestbookDao.keywordsHighlight(query, page.getList(), 1300, "content"); guestbookDao.keywordsHighlight(query, page.getList(), 1300, "reContent"); return page; } }