⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 topicimpl.java

📁 野蔷薇论坛源码 java 自己看看吧。 学习用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* 
 * Created on 2007-5-27
 * Last modified on 2007-9-29
 * Powered by GamVan.com
 */
package com.yeqiangwei.club.service.search.impl;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;

import com.yeqiangwei.club.exception.DAOException;
import com.yeqiangwei.club.param.TopicParameter;
import com.yeqiangwei.club.service.ServiceLocator;
import com.yeqiangwei.club.service.ServiceWrapper;
import com.yeqiangwei.club.service.model.ContentModel;
import com.yeqiangwei.club.service.model.TopicModel;
import com.yeqiangwei.club.service.search.AnalyzerFactory;
import com.yeqiangwei.club.service.search.Constants;
import com.yeqiangwei.club.service.search.MultiFiledQuery;
import com.yeqiangwei.club.service.search.SearchParameter;
import com.yeqiangwei.club.service.search.SearchProvider;
import com.yeqiangwei.club.service.search.SearchUtils;
import com.yeqiangwei.club.service.topic.TopicService;
import com.yeqiangwei.club.service.util.BasicInfoService;
import com.yeqiangwei.io.File;
import com.yeqiangwei.util.StringHelper;
import com.yeqiangwei.util.TypeChange;
import com.yeqiangwei.util.Validator;

public class TopicImpl extends SearchProvider<TopicModel>{
	
	private static final Logger logger = Logger.getLogger(TopicImpl.class);
	
	private static int CANSEARCH = 1;
	
	private static String MINID_FILE = null;
	
	private static String INDEXPATH_TOPIC = null;
	
	private static String TEMPPATH_TOPIC = null;
	
	static
	{
		if(INDEXPATH_TOPIC==null)INDEXPATH_TOPIC = getBasicService().findOnly().getIndexPath()+"topics"+File.separator;
		if(TEMPPATH_TOPIC==null)TEMPPATH_TOPIC = Constants.INDEX_PATH+"topics"+File.separator;
		if(MINID_FILE==null)MINID_FILE = Constants.INDEX_PATH+"topics.txt";
	}
	
	public static void main(String args[]){
		com.yeqiangwei.club.dao.hibernate.ConnectionManager.init();
		com.yeqiangwei.club.util.LanguageUtils.instance();
		TopicImpl st = new  TopicImpl();
		
		st.createIndex(1);
		System.out.println("Job over");
		
		/*
		List<TopicModel> list = st.results(1,30,"美女 喜欢");
		for(int i=0; i<list.size(); i++){
			TopicModel model = list.get(i);
			System.out.println(model.getTitle());
			System.out.println(model.getContentModel().getContent());
		}*/
		System.out.println("========================");
	}
	
	private TopicModel filter(TopicModel model){
		com.yeqiangwei.club.dao.hibernate.ConnectionManager.beginTransaction();
		/*
		 * 如果标题表topicId和内容表的不符则依据标题表topicId去查找内容
		 * 
		 */
		int topicId = model.getTopicId();
		ContentModel content = model.getContentModel();
		if(Validator.isEmpty(content)){
			model = this.getTopicService().findTopicAndContentById(topicId);
		}else{
			int ctopicId = content.getTopicId();
			if(topicId!=ctopicId){
				model = this.getTopicService().findTopicAndContentById(topicId);
				if(this.getTopicService().findById(ctopicId)==null){ //找不到标题的内容
					try {
						this.getTopicService().getContentDAO().deleteByTopicId(ctopicId);
					} catch (DAOException e) {
						logger.error(e.toString());
					}
				}
			}
		}
		com.yeqiangwei.club.dao.hibernate.ConnectionManager.commitTransaction();
		return model;
	}
	
	private void addDocs(TopicModel model, IndexWriter writer) throws IOException
	{
		model = this.filter(model);
		if(Validator.isEmpty(model)||Validator.isEmpty(model.getTitle())){
			logger.warn("找不到帖子!");
		}else{
			/*
			System.out.println(model.getTopicId()+":"+model.getContentModel().getTopicId());
			System.out.println("======================================");
			System.out.println("");
			*/
			//logger.debug("index topicId: "+model.getTopicId());
			Document doc = new Document();
			doc.add(SearchUtils.Text("topicId",model.getTopicId()));
			doc.add(SearchUtils.Text("userId",model.getUserId()));
			doc.add(SearchUtils.Text("userName",model.getUserName()));
			doc.add(SearchUtils.Text("createDateTime",model.getCreateDateTime()));
			doc.add(SearchUtils.Text("title",model.getTitle()));
			doc.add(SearchUtils.Text("content",model.getContentModel().getContent()));
			doc.add(SearchUtils.Text("forumId",model.getForumId()));
			writer.addDocument(doc);
			File.createFile(MINID_FILE,String.valueOf(model.getTopicId()),"gb2312",true);
		}
	}
	

	public void createIndex(int auto) {
		if(STATE==1){
			logger.info("任务重复!");
			return ;
		}
		STATE=1;
		if(auto==1){ //自动判断是创建还是追加
			int id = 0;
			try {
				String strId = File.readTxt(MINID_FILE,"gbk");
				logger.info("MINID_FILE: "+strId);
				id = TypeChange.stringToInt(strId);
			} catch (IOException e) {
				logger.error(e.toString());
			}
			if(id>0){
				createIndex(false,id);
			}else{
				createIndex(true,id);
			}
		}else{ //强制重新生成索引
			try {
				File.createFile(MINID_FILE,"0","gbk",true);
				createIndex(true,0);
			} catch (IOException e) {
				logger.error(e.toString());
			}
		}
		STATE=2;
	}


	public void createIndex(boolean iscreate, int minId) {
		try {
			super.setProgress(SEARCH_TOPIC,0,0);
			logger.info("索引创建开始!");
			logger.debug(TEMPPATH_TOPIC);
			int maxBufferedDocs = getBasicService().findOnly().getMaxBufferedDocs();
			int mergeFactor = getBasicService().findOnly().getMergeFactor();
			int maxFieldLength = getBasicService().findOnly().getMaxFieldLength();
			logger.debug("maxBufferedDocs: "+maxBufferedDocs);
			logger.debug("mergeFactor: "+mergeFactor);
			logger.debug("maxFieldLength: "+maxFieldLength);
			File.createFolder(TEMPPATH_TOPIC);
			IndexWriter writer = SearchUtils.getIndexWriter(TEMPPATH_TOPIC, iscreate);
			writer.setMaxBufferedDocs(maxBufferedDocs); // Defalut 10 
			writer.setMergeFactor(mergeFactor); // Defalut 10 
			writer.setMaxFieldLength(maxFieldLength);
			int rows = 200;
			TopicParameter param = new TopicParameter();
			param.setIsDeleted(false);
			param.setOrderBy(new Byte((byte) 4));
			param.setRows(new Integer(rows));
			param.setMinId(new Integer(minId));
			logger.info("rows: "+rows);
			logger.info("minId: "+minId);
			long count = this.getTopicService().countByParameter(param);
			int pages = (int) (count/rows);
			if(count%rows!=0){
				pages++;
			}
			if(pages==0&&count>0){
				pages = 1;
			}
			logger.info("pages: "+pages);
			int indexed = 0; //完成索引的个数
			outer: 
			for(int page=1; page<=pages; page++){
				param.setPage(new Integer(page));
				List<TopicModel> list = this.getTopicService().findByParameter(param);
				List<ContentModel> clist = this.getTopicService().findContentByParameter(param);
				if(!Validator.isEmpty(list)&&!Validator.isEmpty(clist)){
					if(list.size()==clist.size()){
						for(int i=0; i<list.size(); i++){
							TopicModel model = list.get(i);
							ContentModel cmodel = clist.get(i);
							model.setContentModel(cmodel);
							this.addDocs(model,writer);
							indexed++;
							super.setProgress(SEARCH_TOPIC,count,indexed);
							if(Constants.STOP==1){
								STATE = 0;
								break outer;
							}
						}
					}else{
						logger.warn("==============================");
						logger.warn("取出的文章标题数和文章内容不符");
						logger.warn("文章数:"+list.size());
						logger.warn("内容数:"+clist.size());
						logger.warn("当前页:"+page);
						logger.warn("==============================");
						for(int i=0; i<list.size(); i++){
							TopicModel model = list.get(i);
							this.addDocs(model,writer);
							if(Constants.STOP==1){
								STATE = 0;
								break outer;
							}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -