Lucene 4.7 --创建索引
Lucene的最新版本和以前的语法或者类名,类规定都相差甚远
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包
lucene-analyzers-common-4.7.0.jar lucene-analyzers-smartcn-4.7.0.jar lucene-core-4.7.0.jar lucene-queryparser-4.7.0.jar
//a.从数据源准备索引数据 List<ResultVOFromDB> 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<ResultVOFromDB> 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; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。