欢迎光临我的个人网站,CSDN更多以工具文章为主,个人网站里会有更多关于编程思维等多方面的文章
http://blog.guaidm.com/shocky
有什么疑问欢迎沟通:QQ 358391345
..从产品设计css一直做到linux运维的程序猿... 很多技术都是皮毛,各位见谅,只求和大家交流一点小技术,欢迎拍砖!..
TIP: 看了一些回复,首先谢谢大家支持,知道大家一定也希望学习4.7,也不是不想更新,确实时间有限,同时我在项目中负责很多事情,也很杂,不是专门弄搜索引擎开发的,所以即使学到的也不能保证全面。如果大家有什么问题,或者具体哪方面的想法可以提一下,我更多是在开发中遇到需要处理的问题,然后总结才会发布新博客,也不可能完全花时间像写教材一样做哈
Lucene作为全文所以的不二工具,最新已经到4.7.0,在大学时候玩过一段时间,那时候版本很早,现在4.7.0和原来的语法差距很大了,也没有专门针对最新版本的书籍,包括国外的博客文章都很少,我神州大地就难觅踪影了(如果哪位找到了欢迎拍砖,我想看中文教学..官方英文文档还是有点头晕的)所以最近开发也算是锻炼吧,顺便提供一点学习经验给大家
0.准备工作:
1). Lucene官方API http://lucene.apache.org/core/4_7_0/index.html
2). 我用到的常用JAR包下载:http://download.csdn.net/detail/yangxy81118/8062269
3). 所用到的jar包//a.从数据源准备索引数据
List resultList = getKeyWords();
//b.创建IndexWriter
indexWriter = getIndexWriter();
//c.根据索引数据创建索引
addDoc(indexWriter, resultList);
private IndexWriter getIndexWriter() throws IOException {
Directory dir = FSDirectory.open(new File(indexBuild));
//Version操作开始变得非常常见
//中文分词器的引入,好像4.7.0对庖丁等第三方分词器兼容得并不好,可能也是因为apache对原生的做了一些整合的缘故
Analyzer analyzer = new SmartChineseAnalyzer(Version.LUCENE_47);
//同时引入了IndexWriterConfig对象,封装了早期版本的一大堆参数
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_47, analyzer);
IndexWriter writer = new IndexWriter(dir, config);
return writer;
}
private void addDoc(IndexWriter indexWriter, List resultList) throws IOException {
for (ResultVOFromDB vo : resultList) {
Document doc = createDoc(vo);
indexWriter.addDocument(doc);
}
}
private Document createDoc(ResultVOFromDB vo) throws UnsupportedEncodingException {
Document doc = new Document();
//就像有某个商品,查询结果列表要展示商品的名称,ID,和跳转链接地址,所以从数据库取出name,id,url字段
doc.add(new StringField("name", vo.name, Field.Store.YES));
doc.add(new StringField("id", vo.id, Field.Store.YES));
doc.add(new StoredField("url", vo.url));
//这个keywords就像博客文章的自定义“关键字”,这些字有多个,而且都会做用到索引并且接受分词操作的,“css学习”会被拆分为“css”和“学习”
String[] keys = vo.keywords;
for (int i = 0; i < keys.length; i++) {
doc.add(new TextField("keyword", keys[i],Field.Store.YES));
}
return doc;
}
教育培训,网上报名,在线支付,希望大家支持一下啦!