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

📄 topicimpl.java

📁 野蔷薇论坛源码 java 自己看看吧。 学习用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
						}
					}
				}
				if(Constants.STOP==1){
					STATE = 0;
					break outer;
				}
			}
			writer.optimize();
			writer.close();
			if(Constants.STOP!=1){
				logger.info("终止搜索服务!");
				CANSEARCH = 0;
				logger.info("删除目录旧索引!"+INDEXPATH_TOPIC);
				File.deleteFolder(INDEXPATH_TOPIC);
				logger.info("移动新索引到目录:"+INDEXPATH_TOPIC);
				File.copyFolder(TEMPPATH_TOPIC,INDEXPATH_TOPIC);
				logger.info("开启索引服务器!");
				CANSEARCH = 1;
				logger.info("索引创建完成,本次任务结束!");
				STATE=2;
			}else{
				logger.info("索引创建任务被强迫终止,本次任务结束!");
			}
		} catch (IOException e) {
			logger.error(e.toString());
		}
	}

	public void deleteIndex(int id) {
		CANSEARCH = 0;
		if(new java.io.File(INDEXPATH_TOPIC+"segments").exists()){
			SearchUtils.delete(id,"topicId",INDEXPATH_TOPIC);
		}else{
			logger.error("not find "+INDEXPATH_TOPIC+"segments");
		}
		if(new java.io.File(TEMPPATH_TOPIC+"segments").exists()){
			SearchUtils.delete(id,"topicId",TEMPPATH_TOPIC);
		}else{
			logger.error("not find "+INDEXPATH_TOPIC+"segments");
		}
		CANSEARCH = 1;
	}

	@Override
	public void updateIndex(int id) {
		if(!new java.io.File(INDEXPATH_TOPIC+"segments").exists()
				||!new java.io.File(TEMPPATH_TOPIC+"segments").exists()){
			return ;
		}
		CANSEARCH = 0;
		SearchUtils.delete(id,"topicId",INDEXPATH_TOPIC);
		SearchUtils.delete(id,"topicId",TEMPPATH_TOPIC);
		TopicModel topicModel = this.getTopicService().findTopicAndContentById(id);
		IndexWriter writer;
		try {
			writer = SearchUtils.getIndexWriter(TEMPPATH_TOPIC, false);
			this.addDocs(topicModel,writer);
			writer.optimize();
			writer.close();
			
			writer = SearchUtils.getIndexWriter(INDEXPATH_TOPIC, false);
			this.addDocs(topicModel,writer);
			writer.optimize();
			writer.close();
		} catch (IOException e) {
			logger.error(e.toString());
		}
		CANSEARCH = 1;
	}

	public List<TopicModel> results(SearchParameter param) {
		if(CANSEARCH==0){
			return null;
		}
		super.totalrows = 0;
		super.runtimed = 0;
		long begin = System.currentTimeMillis();
		List<TopicModel> list = null;
		try {
			List<String> fields = new ArrayList<String>();
			List<BooleanClause.Occur> flags = new ArrayList<BooleanClause.Occur>();
			List<Float> boosts = new ArrayList<Float>();
			List<String> keys = new ArrayList<String>();
			fields.add("title");
			fields.add("content");
			fields.add("userName");
			boosts.add(new Float(0.9));
			boosts.add(new Float(0.5));
			boosts.add(new Float(0.1));
			keys.add(param.getKeys());
			keys.add(param.getKeys());
			keys.add(param.getKeys());
			Searcher searcher = new IndexSearcher(INDEXPATH_TOPIC);
			list = new ArrayList<TopicModel>();
			if(!Validator.isEmpty(param.getForumId())&&param.getForumId().intValue()>0){
				fields.add("forumId");
				boosts.add(new Float(1));
				keys.add(String.valueOf(param.getForumId()));
				flags.add(Occur.MUST);
				flags.add(Occur.SHOULD);
				flags.add(Occur.SHOULD);
				flags.add(Occur.MUST);
				
			}else{
				flags.add(Occur.SHOULD);
				flags.add(Occur.SHOULD);
				flags.add(Occur.SHOULD);
			}
			
			if(!Validator.isEmpty(param.getFilter())){
				String[] names = new String[param.getFilter().size()];
				Iterator<String> iterator = param.getFilter().keySet().iterator();
				int i = 0;
				while(iterator.hasNext()){
					names[i] = iterator.next().toString();
					i++;
				}
				if(!Validator.isEmpty(names)){
					for(int n=0; n<names.length; n++){
						fields.add(names[n]);
						boosts.add(new Float(1));
						keys.add(param.getFilter().get(names[n]));
						flags.add(Occur.MUST_NOT);
					}
				}
			}
			Query query = MultiFiledQuery.parse(keys, fields, flags, boosts, AnalyzerFactory.getAnalyzer());
			Hits hits = searcher.search(query);
			SimpleHTMLFormatter sf = new SimpleHTMLFormatter("<font class=\"red\">","</font>");
			QueryScorer scorer = new QueryScorer(query);
			
			Highlighter highlighter_title = null;
			Highlighter highlighter_content = null;
			
			if(!Validator.isEmpty(param.getHighlight())&&param.getHighlight()){
				highlighter_title = new Highlighter(sf, scorer);
				highlighter_title.setTextFragmenter(new SimpleFragmenter(50));
				
				highlighter_content = new Highlighter(sf, scorer);
				highlighter_content.setTextFragmenter(new SimpleFragmenter(5));
			}
			
			if(hits!=null){
				super.totalrows = (hits.length());
				int listrows = param.getRows().intValue(); //每页显示行数
				int startrows = 0; //显示记录集的起始行
				int maxrows = listrows; //当前页最大行数
				/* 翻页滤错开始 */
				if(listrows>totalrows){
					listrows = totalrows;
				}
				if(param.getPage().intValue()>1){
					startrows = (listrows * (param.getPage().intValue()-1));
					maxrows = startrows + listrows;
				}
				if(maxrows > totalrows){
					maxrows = totalrows;
				}
				for (int i = startrows; i < maxrows; i++) {
					try {
						Document doc = hits.doc(i);
						String title = doc.get("title");
						title = StringHelper.htmlEncoder(title);
						String content = doc.get("content");
						content = StringHelper.htmlEncoder(content);
						if(!Validator.isEmpty(param.getHighlight())&&param.getHighlight()){
							TokenStream stream = AnalyzerFactory.getAnalyzer().tokenStream("title",new StringReader(title));
							title = highlighter_title.getBestFragment(stream, title);
							stream = AnalyzerFactory.getAnalyzer().tokenStream("content",new StringReader(content));
							content = highlighter_content.getBestFragments(stream,content,50,"...");
						}
						content = com.yeqiangwei.util.StringHelper.ubbPattern(content,"\\[(.*?)\\](.*?)\\[/(.*?)\\]","$2","");
						if(Validator.isEmpty(title)){
							title = doc.get("title");
							title = StringHelper.htmlEncoder(title);
						}
						if(Validator.isEmpty(content)){
							content = StringHelper.substring(doc.get("content"),0,50,"");
							content = StringHelper.htmlEncoder(content);
						}/*else{
							content = content.replaceAll("<br/>"," ");
							if(content.length()>200){
								content = StringHelper.substring(content,0,200,"")+"...";
							}
						}*/
						content = content.replaceAll("<br/>","...");
						content = content.replaceAll("&nbsp;"," ");
						StringHelper.ubbPattern(content,"(\\s+)"," ","");
						TopicModel tmodel = new TopicModel();
						tmodel.setTopicId(TypeChange.stringToInt(doc.get("topicId")));
						tmodel.setTitle(title);
						tmodel.setUserId(TypeChange.stringToInt(doc.get("userId")));
						tmodel.setUserName(doc.get("userName"));
						tmodel.setForumId(TypeChange.stringToInt(doc.get("forumId")));
						ContentModel cmodel = new ContentModel();
						cmodel.setContent(content);
						tmodel.setContentModel(cmodel);
						list.add(tmodel);
					} catch (IOException e) {
						logger.error(e.toString());
					}  
				}
			}
			searcher.close();
		} catch (IOException e) {
			logger.error(e.toString());
		} catch (ParseException e) {
			logger.error(e.toString());
		}
		long end = System.currentTimeMillis();
		super.runtimed = (end - begin);
		return list;
	}

	public TopicService getTopicService() {
		return ServiceWrapper.<TopicService>getSingletonInstance(ServiceLocator.TOPIC);
	}
	
	public static BasicInfoService getBasicService() {
		return ServiceWrapper.<BasicInfoService>getSingletonInstance(ServiceLocator.BASICINFO);
	}

	public long getRuntimed() {
		return runtimed;
	}
	
	public int getTotalrows() {
		return super.totalrows;
	}

	public void setTotalrows(int totalrows) {
		super.totalrows = totalrows;
	}

}

⌨️ 快捷键说明

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