刚刚接触lucene 写个最简单程序。记录一下。
@Test
public void firstIndexer() throws Exception{
//打开一个directory 其中 FSDirectory是个工具类,它会根据操作系统返回合适的Directory类型。生产环境要根据实际情况进行选择。
Directory d = FSDirectory.open(new File(INDEX_DIR));
//使用IndexWriterConfig创建indexWriter ,conf 中可以设置参数。以优化性能。
IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_34,new StandardAnalyzer(Version.LUCENE_34));
IndexWriter indexWriter = new IndexWriter(d, conf);
//数据文件 我用的是一个目录下的所有文件。文件全部是都是HTML
File dataFile = new File(DATA_DIR);
File[] files = dataFile.listFiles();
for (int i = 0; i < files.length; i++) {
Document doc = new Document();
File f = files[i];
//使用文件产见FIELD 该接口分析正文,不存存储正文信息。 注意只有小信息如标题 文件名等适合存储到索引。
doc.add(new Field("contents",new FileReader(f)));//有变化的地方
//分析 并且保存。
doc.add(new Field("filename",f.getCanonicalPath(),Field.Store.YES, Field.Index.ANALYZED));//有变化的地方
indexWriter.addDocument(doc);
}
//优化 提交。
indexWriter.optimize();
indexWriter.close();
}
建立索引后会在你indexPath中看到
@Test
public void search() throws Exception {
//查询基本类 search 有几种 ,但是4.0貌似要将所有的search都集中到indexSearcher
//现在的indexsearcher 的构造方法很灵活,可以使用reader 也可是用多线程。并发多个查询多个索引。
IndexSearcher seacher = new IndexSearcher(FSDirectory.open(new File(INDEX_DIR)));
//lucene提供的优化方式 。支持一些逻辑查询 。但是最终转换出来的一般BOOLEANQUERY。如果过于复杂反回影响查询效果。建议根据业自己写booleanquery
QueryParser qp = new QueryParser(Version.LUCENE_34,"contents",new StandardAnalyzer(Version.LUCENE_34));
//检索对象。
Query query = qp.parse("index");
//瞧瞧给我们转换成了什么query对象
System.out.println(query);
//查询 lucene 没有分页机制,如果需要可以尝试传入collector 。我就写个10,意思获取前十条数据。
//返回TOPDOCs 并不是结果,而是结果的一种封装,还包含了其他的检索结果相关的信息
TopDocs top = seacher.search(query,10);
//结果总数
System.out.println(top.totalHits);
//遍历结果
ScoreDoc[] result = top.scoreDocs;
for (int i = 0; i < result.length; i++) {
//怎么吃进去 怎么吐出来。。doc进去的当然得doc出来 ,result中只有docid 不是加载全部内容,所以这里需要借助indexseacher
//根据docID取出数据。
Document doc = seacher.doc(result[i].doc);
////contents 因为没有存储 所以值为null 。
System.out.print(doc.getFieldable("filename")+"======");
System.out.println(doc.getFieldable("contents"));
}
}
能建能查。。。入门够了。
下一步将研究lucene的索引结构。
- 大小: 8 KB
分享到:
相关推荐
自己写的lucene基础入门
lucene入门相关知识,包括基本介绍、简单示例、核心API介绍。
里面编写了法创建,搜索的基本方法 LuceneDemo 单个文件索引,创建查找 CopyFile 为多文件复制多些文件做准备 CreateIndexe 多文件创建索引;Searcher多文件搜索对应CreateIndexe
lucene入门demo 实现基本的检索 可以进行改进
Lucene API的介绍,适合入门的人学习.包括全文索引文件的基本结构.
(狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...
1.4 nutch VS lucene.....2 2. nutch的安装与配置.....3 2.1 JDK的安装与配置.3 2.2 nutch的安装与配置........5 2.3 tomcat的安装与配置......5 3. nutch初体验7 3.1 爬行企业内部网....7 3.1.1 配置nutch.....
后文的四种基本架构中将逐一介绍应用到的其它套件。 Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于...
初学lucene的同学可以参照一下,代码中整理了一些说明,可以很快入门lucene,希望对大家有用!
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索...
一个分布式的实时文档存储,每个字段可以被索引与搜索一个分布式实时分析搜索引擎能胜任上百个服务节点的扩展,并支持PB级别的结构化或者非结构化数据Elasticsearch是面向文档,即文档是可以被索引的信息的基本单位...
关于solr的一些基础入门,基于solr6.5,了解之后可以基本上架构出属于自己的搜索引擎
Android新控件ViewPager2入门示例 Android仿闲鱼底部导航栏 安卓阿里开源ARouterDemo Android使用RecyclerView播放视频列表 Android桌面图标和App名字 Android解决滑动冲突JavaEE JavaEE中Lucene入门程序 Struts2
Solr它是一种开放源码的、基于LuceneJava的搜索服务器,易于加入到Web应用程序中。Solr提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT和JSON等格式)。它易于安装和配置,而且附带了一...
ES作为MySQL等关系型数据库的LIKE功能出现(当然这只是简单的类比),基于Apache的Lucene实现,提供RESTful风格的操作(增删改查)。随着ES生态的不断繁荣,结合ELK(ElasticSearch, Logstash, Kibana
本文简单描述SolrCloud的特性,基本结构和入门,基于Solr4.5版本。Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库。Solr是以Lucene为基础实现的文本检索应用服务。SolrCloud是Solr4.0版本开发出的具有...
1.4 nutch VS lucene.....2 2. nutch的安装与配置.....3 2.1 JDK的安装与配置.3 2.2 nutch的安装与配置........5 2.3 tomcat的安装与配置......5 3. nutch初体验7 3.1 爬行企业内部网....7 3.1.1 配置nutch....7 ...
本课程深入浅出剖析了Elasticsearch的核心基础知识,带着大家一步一步,从快速入门,到理解Elasticsearch的工作原理、内核级原理,再到动手实战操作Elasticsearch的各种核心功能,可以基于Java语言开发基本的搜索和...