package cn.crawler.lucene;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import cn.crawler.lucene.bean.BlogBean;
public class SearchIndexs {
private static String indexPath = "./data";
static Log log = LogFactory.getLog("log4j");
/**
* 显示多少条
*/
private static int pages=10;
/**
* 内容摘要长度<br>单位:字
*/
private static int content_lenght=300;
private SearchIndexs() {}
public static void main(String[] args) throws Exception {
log.info(search("csdn"));
}
@SuppressWarnings("deprecation")
public synchronized static List<BlogBean> search(String keyword){
List<BlogBean> list=new ArrayList<>();
try {
IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(indexPath)));
IndexSearcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new SmartChineseAnalyzer(Version.LUCENE_40);
String[] fields={"url","title","content"};
QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_40,fields, analyzer);
Query query = parser.parse(keyword);
//高亮显示
Date start = new Date();
TopDocs results = searcher.search(query, pages);
Date end = new Date();
log.info("检索完成,用时" + ((end.getTime() - start.getTime())/1000.0) + "毫秒");
ScoreDoc[] hits = results.scoreDocs;
Document doc=null;
for(int i=0;hits!=null&&i<hits.length;i++){
doc=searcher.doc(hits[i].doc);
list.add(BlogBean.toBolgBean(doc));
}
shortContent(list);
highLighter(list,keyword);
reader.close();
analyzer.close();
} catch (Exception e) {
e.printStackTrace();
log.error("检索"+keyword+"出现异常:"+e.getMessage());
return null;
}
return list.size()==0?null:list;
}
/**
* 高亮显示
* @param list
* @param keyword
*/
private static void highLighter(List<BlogBean> list,String keyword) {
if(list==null)
return ;
for(BlogBean bBean:list){
bBean.setContent(bBean.getContent().replace(keyword,"<font color='red' >"+keyword+"</font>"));
bBean.setTitle(bBean.getTitle().replace(keyword,"<font color='red' >"+keyword+"</font>"));
}
}
/**
* 内容摘要
* @param list
*/
private static void shortContent(List<BlogBean> list) {
if(list==null)
return ;
for(BlogBean bBean:list){
if(bBean.getContent().length()<content_lenght)
continue;
bBean.setContent(bBean.getContent().substring(0,content_lenght));
}
}
/**
* java实现不区分大小写替换
* @param source
* @param oldstring
* @param newstring
* @return
*/
public static String IgnoreCaseReplace(String source, String oldstring,String newstring) {
Pattern p = Pattern.compile(oldstring, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(source);
String ret = m.replaceAll(newstring);
return ret;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
鄙人自制csdn博客爬虫 (119个子文件)
je.info.0 0B
_4a.cfe 268B
_4b.cfe 268B
_47.cfe 268B
_49.cfe 268B
_4c.cfe 268B
_48.cfe 268B
_4a.cfe 268B
_4b.cfe 268B
_47.cfe 268B
_49.cfe 268B
_4c.cfe 268B
_48.cfe 268B
_47.cfs 10KB
_47.cfs 10KB
_4b.cfs 7KB
_4b.cfs 7KB
_4a.cfs 5KB
_4a.cfs 5KB
_48.cfs 4KB
_48.cfs 4KB
_4c.cfs 2KB
_4c.cfs 2KB
_49.cfs 2KB
_49.cfs 2KB
SearchIndexs.class 6KB
CreateIndexs.class 3KB
BlogBean.class 3KB
CsdnBlogCrawler.class 3KB
HtmlUtil.class 2KB
Controller.class 2KB
.classpath 836B
org.eclipse.wst.common.component 493B
org.eclipse.wst.jsdt.ui.superType.container 49B
_46_Lucene41_0.doc 28KB
_46_Lucene41_0.doc 28KB
_46.fdt 236KB
_46.fdt 236KB
_46.fdx 98B
_46.fdx 98B
_46.fnm 280B
_46.fnm 280B
segments.gen 20B
segments.gen 20B
lucene-analyzers-smartcn-4.4.0.jar 3.43MB
lucene-core-4.4.0.jar 2.11MB
je-4.0.92.jar 2.03MB
lucene-analyzers-common-4.4.0.jar 1.51MB
httpclient-4.2.3.jar 423KB
tika-core-1.0.jar 417KB
tika-parsers-1.0.jar 413KB
standard.jar 384KB
lucene-queryparser-4.4.0.jar 376KB
log4j-1.2.14.jar 359KB
apache-mime4j-dom-0.7.jar 293KB
commons-codec-1.6.jar 227KB
commons-compress-1.3.jar 219KB
httpcore-4.2.2.jar 218KB
lucene-queries-4.4.0.jar 198KB
htmlparser.jar 136KB
crawler4j-3.5.jar 98KB
apache-mime4j-core-0.7.jar 93KB
boilerpipe-1.1.0.jar 90KB
metadata-extractor-2.4.0-beta-1.jar 89KB
tagsoup-1.2.1.jar 89KB
htmllexer.jar 70KB
commons-logging-1.1.1.jar 59KB
asm-3.1.jar 42KB
geronimo-stax-api_1.0_spec-1.0.1.jar 28KB
jstl.jar 20KB
SearchIndexs.java 3KB
CsdnBlogCrawler.java 2KB
BlogBean.java 2KB
CreateIndexs.java 2KB
HtmlUtil.java 1KB
Controller.java 1KB
00000000.jdb 24KB
spider.jpg 58KB
.jsdtscope 503B
result.jsp 2KB
search.jsp 1KB
je.lck 0B
je.info.0.lck 0B
MANIFEST.MF 39B
org.eclipse.wst.jsdt.ui.superType.name 6B
_46.nvd 298B
_46.nvd 298B
_46.nvm 57B
_46.nvm 57B
_46_Lucene41_0.pos 93KB
_46_Lucene41_0.pos 93KB
org.eclipse.jdt.core.prefs 598B
org.eclipse.ltk.core.refactoring.prefs 106B
org.eclipse.wst.ws.service.policy.prefs 87B
.project 1KB
log4j.properties 306B
log4j.properties 306B
segments_3y 220B
segments_3y 220B
_46.si 400B
共 119 条
- 1
- 2
资源评论
- yuxinzheng2015-09-01还行基本上实现了我想要的功能 。
- qq111343434343434342014-02-27很好,基本上实现了我想要的功能
- 愤怒的火柴2018-09-25不如使用clwer框架实现的快
- brotherstrong2014-01-08很好,基本上实现了我想要的功能
落叶翩翩
- 粉丝: 174
- 资源: 46
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于ArcEngine的GIS数据处理系统.zip
- (源码)基于JavaFX和MySQL的医院挂号管理系统.zip
- (源码)基于IdentityServer4和Finbuckle.MultiTenant的多租户身份认证系统.zip
- (源码)基于Spring Boot和Vue3+ElementPlus的后台管理系统.zip
- (源码)基于C++和Qt框架的dearoot配置管理系统.zip
- (源码)基于 .NET 和 EasyHook 的虚拟文件系统.zip
- (源码)基于Python的金融文档智能分析系统.zip
- (源码)基于Java的医药管理系统.zip
- (源码)基于Java和MySQL的学生信息管理系统.zip
- (源码)基于ASP.NET Core的零售供应链管理系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功