Package com.jeecms.cms.lucene

Source Code of com.jeecms.cms.lucene.LuceneContentDaoImpl

package com.jeecms.cms.lucene;

import java.io.IOException;
import java.util.Date;

import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.hibernate.CacheMode;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.springframework.stereotype.Repository;

import com.jeecms.cms.entity.main.Content;
import com.jeecms.cms.entity.main.ContentCheck;
import com.jeecms.common.hibernate3.Finder;
import com.jeecms.common.hibernate3.HibernateBaseDao;

@Repository
public class LuceneContentDaoImpl extends HibernateBaseDao<Content, Integer>
    implements LuceneContentDao {
  public Integer index(IndexWriter writer, Integer siteId, Integer channelId,
      Date startDate, Date endDate, Integer startId, Integer max)
      throws CorruptIndexException, IOException {
    Finder f = Finder.create("select bean from Content bean");
    if (channelId != null) {
      f.append(" join bean.channel channel, Channel parent");
      f.append(" where channel.lft between parent.lft and parent.rgt");
      f.append(" and channel.site.id=parent.site.id");
      f.append(" and parent.id=:parentId");
      f.setParam("parentId", channelId);
    } else if (siteId != null) {
      f.append(" where bean.site.id=:siteId");
      f.setParam("siteId", siteId);
    } else {
      f.append(" where 1=1");
    }
    if (startId != null) {
      f.append(" and bean.id > :startId");
      f.setParam("startId", startId);
    }
    if (startDate != null) {
      f.append(" and bean.contentExt.releaseDate >= :startDate");
      f.setParam("startDate", startDate);
    }
    if (endDate != null) {
      f.append(" and bean.contentExt.releaseDate <= :endDate");
      f.setParam("endDate", endDate);
    }
    f.append(" and bean.status=" + ContentCheck.CHECKED);
    f.append(" order by bean.id asc");
    if (max != null) {
      f.setMaxResults(max);
    }
    Session session = getSession();
    ScrollableResults contents = f.createQuery(getSession()).setCacheMode(
        CacheMode.IGNORE).scroll(ScrollMode.FORWARD_ONLY);
    int count = 0;
    Content content = null;
    while (contents.next()) {
      content = (Content) contents.get(0);
      writer.addDocument(LuceneContent.createDocument(content));
      if (++count % 20 == 0) {
        session.clear();
      }
    }
    if (count < max || content == null) {
      // 实际数量小于指定数量,代表生成结束。如果没有任何数据,也代表生成结束。
      return null;
    } else {
      // 返回最后一个ID
      return content.getId();
    }

  }

  @Override
  protected Class<Content> getEntityClass() {
    return Content.class;
  }
}
TOP

Related Classes of com.jeecms.cms.lucene.LuceneContentDaoImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.