本文来自:fair-jm.iteye.com 转截请注明出处
学习的材料是北风网的课程:
http://www.ibeifeng.com/goods-378.html
代码是边看视频边自己码的 不知道是否侵权 如有侵权请告知 会立即删除
lucene的版本更新也挺快的 这套视频我刚买的时候还是4.6.0 昨天看到lucene那已经到4.7.2了
于是用4.7.2做为学习的版本
索引的建立和读取
主要是两个类
IndexWriter和IndexReader
最初的demo也是根据这两个类展开
IndexWriter的构造方法如下:
Constructs a new IndexWriter per the settings given in conf.
需要一个Directory和IndexWriterConfig对象作为参数
其中Directory表示索引存放的路径
IndexWriter包含使用lucene版本(lucene各版本不兼容)和Analyzer(分词器)
代码如下:
//使用标准分词器 Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_47); //使用FSDirectory的open方法打开磁盘上的目录 Directory dir = FSDirectory.open(indexPath.toFile()); //设置IndexWriterConfig IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_47, analyzer);
得到IndexWriter 需要写入Document对象 Document对象内有很多的Field
也就是将Field填入Document对象 再由IndexWriter写入到磁盘内
代码如下:
try (IndexWriter iw = new IndexWriter(dir, config)) { Document doc = new Document(); // id:1 title:key1 key2 content:key3 key4 // StringField不分词 查询时要输入完整的查询 例如输入 key1 就不会得到结果 // TextField是分词的 查询词输入 key3或者key4会得到结果 但是输入key3 key4就不会得到结果了 IndexableField idField = new IntField("id", 1, Field.Store.YES); IndexableField titleField = new StringField("title", "key1 key2", Field.Store.YES); IndexableField contentField = new TextField("content", "key3 key4", Field.Store.YES); doc.add(idField); doc.add(titleField); doc.add(contentField); iw.addDocument(doc); iw.commit(); } } catch (IOException e) { e.printStackTrace(); }
简单的索引建立就完成了(以上代码花括号不配对是中间截了一下 try没截取 代码中的try是try-with-resources)
然后是通过索引获取内容
需要IndexReader对象 可以通过DirectoryRedaer.open方法得到(传入的参数是放索引的目录)
然后通过IndexSearch传入Query对象参数进行查询 查询得到TopDocs的对象 再进一步得到document的id
将id传入IndexReader的document方法后获得具体的Document对象(好绕啊有没有.....)
最后通过Document对象的get方法传入key 得到value(我所说的key就是上面代码中IndexabelField的第一个 参数)
看具体代码:
public static void searcherDemo(Path indexPath) { try { Directory dir = FSDirectory.open(indexPath.toFile()); try (IndexReader reader = DirectoryReader.open(dir)) { IndexSearcher search = new IndexSearcher(reader); Query query = new TermQuery(new Term("content", "key3 key4")); //这样查询不到 因为TextField是进行分词的 // Query query = NumericRangeQuery.newIntRange("id", 1, 1, true,true); TopDocs topDocs = search.search(query, 10); int hits = topDocs.totalHits; System.out.println("hits:" + hits); ScoreDoc[] scoreDocs = topDocs.scoreDocs; for (ScoreDoc sd : scoreDocs) { int docId = sd.doc; Document doc = reader.document(docId); System.out.println(doc.get("id") + ":" + doc.get("title") + ":" + doc.get("content")); } } } catch (IOException e) { e.printStackTrace(); } }
简单记录一下笔记和代码~需要完整教程的可以购买北风网的视频(我可不是打广告喂....
相关推荐
lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习...
lucene 4.7.2支持java 6 ,之后的版本需要java 7以上,创建、删除、修改索引,搜索支持通用对象(可以根据对象类型搜索),可以范围搜索、排序、高亮,希望有所帮助
本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记本人的Lucene2.9学习笔记本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记
lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记lucene使用总结笔记
lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子...
(2) 扩展基于数字和日期的查询 45 (3) 自定义QueryParser效果测试 46 5.5 自定义过滤器 49 (1) 分析需求,创建接口 49 (2) 创建过滤器,继承Filter 50 (3) 实现接口,效果演示 52 第六章 LUCENE扩展 54 6.1 Luke 54 ...
lucene学习笔记,lucene入门必备材料
很好的Lucene学习入门资料。lucene是纯java开发的,支持索引的建立和搜索
NULL 博文链接:https://menglh.iteye.com/blog/347467
lucene基础学习笔记&源码
1、案例分析:什么是全文检索,如何实现全文检索 2、Lucene实现全文检索的流程 a) 创建索引 b) 查询索引 3、配置开发环境 4、创建索引库 5、查询索引库 6、分析器的分析过程 a) 测试分析器的分词效果 b) 第三方中文...
基于lucene的开发JavaEE项目 基于lucene的开发JavaEE项目 基于lucene的开发JavaEE项目 基于lucene的开发JavaEE项目 基于lucene的开发JavaEE项目
NULL 博文链接:https://kylinsoong.iteye.com/blog/719415
Lucene学习笔记.doc nutch_tutorial.pdf nutch二次开发总结.txt nutch入门.pdf nutch入门学习.pdf Nutch全文搜索学习笔记.doc Yahoo的Hadoop教程.doc [硕士论文]_基于Lucene的Web搜索引擎实现.pdf [硕士论文]_基于...
Lucene学习源码.rar
Lucene的的学习资料及案例,包括一个lucene的学习资料总结。供大家学习使用,也有本人写的一个小案例。
基于Lucene的搜索引擎的研究与应用基于Lucene的搜索引擎的研究与应用