文档章节

lucene4.0入门1

明舞
 明舞
发布于 2014/11/08 21:07
字数 606
阅读 35
收藏 0
点赞 0
评论 0

Lucene主要分为三大块:

1、创建索引

2、分词

3、读取并查询索引

前提:由于本人目前看的是3.5的视频材料,所以可能里面有的写法还是3.5的写法,我能保证demo能跑通,能运营,能明白意思。

发现在lucene3.5里,lucene的主要jar都在core包里,但是在4.0以后好像被拆分成了多个jar,需要根据项目需要,一点一点自己往上加jar包。

所用jar:   lucene 4.10.2

教学视频:lucene 3.5

依赖的jar包:

入门代码1:

package com.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
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.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class HelloLucene2 {
	@SuppressWarnings("deprecation")
	public void index() throws Exception {
		
		
		//创建directory,主要为了存储索引存放的路径
		//Directory directory = new RAMDirectory();// 建立在内存中
		Directory fsddirectory = FSDirectory.open(new File(
				"D:/lucene-file/index01"));//建立在硬盘上
		//indexwriter的配置信息
		IndexWriterConfig IndexWriterConfig = new IndexWriterConfig(
				Version.LATEST, new StandardAnalyzer(Version.LATEST));
		//indexwriter主要是用来写索引的,类似于file流
		IndexWriter writer = new IndexWriter(fsddirectory, IndexWriterConfig);
		//document类似于一条数据,存放数据信息
		Document document = null;
		//field类似于字段,用于存放数据的每个分类信息
		File f = new File("D:/lucene-file/exampletxt");
		for (File file : f.listFiles()) {
			document = new Document();
			document.add(new Field("content", new FileReader(file)));
			document.add(new Field("filename", file.getName(), Field.Store.YES,
					Field.Index.NOT_ANALYZED));
			document.add(new Field("path", file.getAbsolutePath(),
					Field.Store.YES, Field.Index.NOT_ANALYZED));
			writer.addDocument(document);
		}
		if (writer != null) {
			writer.close();
		}

	}
	
	public void search() throws Exception {
		//主要流程:
		//1:创建directory   从哪读取信息与资料
		Directory fsddirectory = FSDirectory.open(new File(
				"D:/lucene-file/index01"));//放在硬盘上的信息源
		//2:创建indexReader  //读取Index索引
		IndexReader reader = IndexReader.open(fsddirectory);
		//3:根据indexReader创建IndexSearcher
		IndexSearcher searcher = new IndexSearcher(reader);
		//4:创建搜索的Query
		//需要创建parser来确定要搜索的文件的内容,第二个参数表示搜索的域
		 QueryParser parser = new QueryParser(Version.LATEST, "content",new StandardAnalyzer(Version.LATEST));
		 //表示域中包含徐这个字的文档	
		 Query query = parser.parse("java");
		 //5:根据 searcher搜索并且返回TopDocs,类似于数据库的结果集
		 //10代表搜索10条, 
		 TopDocs tds = searcher.search(query, 10);
		//6:根据TOPDocs获取ScoreDoc对象
		 ScoreDoc[] sds =tds.scoreDocs;
		//7:根据searcher和ScordDoc对象获取具体的Document对象
		 for (ScoreDoc scoreDoc : sds) {
			 Document d = searcher.doc(scoreDoc.doc);
			System.out.println(d.get("filename"));
			System.out.println(d.get("path"));
			System.out.println("---------");
		}
		 
		 System.out.println("length"+sds.length);
		
		//8:根据Document对象获取需要的值
		//9:关闭reader
		reader.close();
	}

}

test类:

package com.junittest;

import static org.junit.Assert.*;

import org.junit.Test;

import com.test.HelloLucene2;

public class TestLucene {

/*	@Test
	public void testindex() throws Exception {
		HelloLucene2 hl = new HelloLucene2();
		hl.index();
	}*/
	@Test
	public void testsearch() throws Exception {
		HelloLucene2 hl = new HelloLucene2();
		hl.index();
		hl.search();
	}

}


© 著作权归作者所有

共有 人打赏支持
明舞
粉丝 227
博文 424
码字总数 516555
作品 0
程序员
怎么动态加载引用的类

我有一段代码用到的是lucene4.0,但是项目以前用了lucene2.4,其中的IndexWriter类变更很大,使用我的lucene4.0会报错,但是我使用lucene2.4也不行。 我想自己在代码中弄一个类加载器,动态的加...

安西都护府首席程序员
2015/04/15
121
2
IK Analyzer 2012 FF for Lucene 4.0 发布

最近一段时间正式公司事务最忙碌的时候,Lucene4.0和Solr4.0发布后,便收到了广大网友的大量邮件要求更新版本,这让我既开心又感到鸭梨大啊~~ 花了3天时间,了解了Lucene4.0和solr 4.0与分词...

林良益
2012/10/23
11.1K
16
lucene 4.0-- ik

@linliangyi 你好,想跟你请教个问题: 在lucene4.0以下分词存储表示为 new Field("table",text,Field.Store.YES, Field.Index.ANALYZED); 分词不存储表示为new Field("table",text,Field.St...

_panfang
2013/03/05
138
0
发布 IK Analyzer 2012 FF 版本

首先感谢大家对IK分词器的关注。 最近一段时间正式公司事务最忙碌的时候,Lucene4.0和Solr4.0发布后,便收到了广大网友的大量邮件要求更新版本,这让我既开心又感到鸭梨大啊~~ 花了3天时间,...

林良益
2012/10/23
0
3
关于lucene4.0 分组统计问题

哪种方法能够很好实现lucene4.0 分组统计,特别是在分组的那个字段存在批量的数据?

九劫散仙
2013/04/07
169
0
关于lucene4.0 并发读取多个索引的问题

lucene4.0 中ParallelAtomicReader这个类怎么使用,怎么同时读取多个索引,进行查询,最好来段代码,示例一下谢谢

九劫散仙
2013/04/07
298
0
IKAnalyzer何时支持Lucene4.x

目前我已经用了lucene4.0,虽然是alpha版,但是也是未来的第一步。但是IKAnalyzer不支持lucene4,如果作者在,是否有计划对4支持?何时支持?

开源狂人
2012/07/11
2K
9
Lucene 4.0如何完成自动补全

使用lucene 4.0如何完成自动补全,因为我使用lucene做的商品检索。在做商品检索的时候已经有一个索引库了,但是要是添加自定不全的话,这个索引是需要另外建立还是怎么着,要是需要建立怎么建...

MLGKO
2015/12/22
192
2
Apache Lucene全文检索

Lucene4.0的官网文档:http://lucene.apache.org/core/400/core/overview-summary.html 一、什么是lucene Lucene是一套用于全文检索和搜寻的开源程式库是全文检索的框架而不是产品(不像百度...

蜻蜓凹蝶
2016/12/01
10
0
Apache Lucene-使用简单介绍

首先呢,学习任何一门新的亦或是旧的开源技术,百度其中一二是最简单的办法,先了解其中的大概,思想等等。这里就贡献一个讲解很到位的ppt。已经被我转成了PDF,便于搜藏。   其次,关于第...

LANTIANFEIYING
2016/10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

zk实战--rpc框架集群化

在看此篇内容时需要浏览下面内容 netty实战--手写rpc框架 前文功能简介以及功能扩充 利用netty来实现一个点对点的rpc调用。客户端和服务端都是靠手写地址进行socket同学的,无法1对多,也无法...

xpbob
18分钟前
8
0
springboot 发送邮件

获取授权码 添加配置 # 账号和密码spring.mail.username=aaa@qq.comspring.mail.password=bbb# 服务器地址spring.mail.host=smtp.qq.comspring.mail.properties.mail.smtp.ssl.en...

阿豪boy
19分钟前
0
0
如何使用GNU Ring?

文章名:如何使用GNU Ring? 作者:冰焰火灵X 1079092922@qq.com 文章许可:CC BY-SA 4.0 ##1. 安装 下载GNU Ring 点击左边选择你的系统版本(这里以 GNU/Linux 为例,我使用的是Mint 18.3)...

ICE冰焰火灵X
21分钟前
1
0
深入理解springMVC

什么是spring MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而...

Java填坑之路
27分钟前
1
0
《射雕英雄传》书摘

1. 我虽是个飘泊江湖的贫家女子,可不是低三下四、不知自爱之人。你如真心爱我,须当敬我重我。我此生决无别念,就是钢刀架颈,也决意跟定了你。将来……将来如有洞房花烛之日,自然……自能...

k91191
38分钟前
0
0
解决:modal中datePicker 选中时,会触发modal的hidden.bs.modal事件

最近项目中发现了一个bug,具体表现为选中模态框上datepicker组件上的日期时,会触发模态框的关闭事件,导致数据编辑无法正常进行。网上搜索了下,解决方法如下: $('.datepicker').on('hid...

Funcy1122
41分钟前
0
0
Redis分布式锁的正确实现方式

前言 分布式锁一般有三种实现方式: 1.数据库乐观锁 2.基于Redis的分布式锁; 3.基于Zookeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis...

大海201506
今天
1
0
ClassNotFoundException: javax.el.ELManager

这个是因为tomcat7中的el-api2.2,有些版本太低,建议升级tomcat到8.0,利用el-api3.0就会解决这个问题。

无语年华
今天
0
0
Jvm堆内存的划分结构和优化,垃圾回收详解(详细解答篇)

在JVM中堆空间划分如下图所示 上图中,刻画了Java程序运行时的堆空间,可以简述成如下2条 1.JVM中堆空间可以分成三个大区,新生代、老年代、永久代 2.新生代可以划分为三个区,Eden区,两个幸...

嘻哈开发者
今天
1
0
CentOS 7.4 设置系统字符编码

1.语言变量LANG在 /etc/locale 文件中。 2.可以通过/ect/profile 来修改LC_TYPE 变量的值 添加如下代码 export LC_ALL="zh_CN.GBK" export LANG="zh_CN.GBK" 到profile文件中,变量的可以修改...

qimh
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部