📄 topicimpl.java
字号:
}
}
}
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())&¶m.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())&¶m.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())&¶m.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(" "," ");
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 + -