文档章节

lucene4.0入门1

明舞
 明舞
发布于 2014/11/08 21:07
字数 606
阅读 35
收藏 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
143
2
IK Analyzer 2012 FF for Lucene 4.0 发布

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

林良益
2012/10/23
11.9K
16
Lucene 4.0如何完成自动补全

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

MLGKO
2015/12/22
237
2
发布 IK Analyzer 2012 FF 版本

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

林良益
2012/10/23
0
3
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
160
0

没有更多内容

加载失败,请刷新页面

加载更多

SRE的含义及与 DevOps 如何关联?

虽然站点可靠性工程师(site reliability engineer SRE)角色在近几年变得流行起来,但是很多人 —— 甚至是软件行业里的 —— 还不知道 SRE 是什么或者 SRE 都干些什么。为了搞清楚这些问题...

linuxCool
10分钟前
1
0
月入3万之一个程序员的转行坎坷历程

陈年往事 “我月入3万,怎么会少少了你一个鸡蛋啊?” 这是2017年9月左右的一个新闻,一位煎饼摊大妈因和顾客争执时脱口而出这样一句话而走红。当时还上了各大新闻的头条。 互联网兴起今天,...

苏南-首席填坑官
32分钟前
1
1
OSChina 周一乱弹 —— 眼看着这颗陨石砸了下来

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享Nachtblut的单曲《Antik》 《Antik》- Nachtblut 手机党少年们想听歌,请使劲儿戳(这里) @mr_chip :上海的初雪之后有点冷 ...

小小编辑
57分钟前
266
7
Confluence 6 修改导航显示选项

选择 子页面(Child pages)来在边栏中查看当前页面的子页面。 选择 页面树(Page tree)来查看整个空间的页面树,扩展当前的页面。 你也可以选择是否完全隐藏导航显示选项或者添加你希望可见...

honeymose
今天
2
0
Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部