文档章节

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();
	}

}


© 著作权归作者所有

共有 人打赏支持
明舞
粉丝 229
博文 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
发布 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
138
0
关于lucene4.0 分组统计问题

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

九劫散仙
2013/04/07
169
0

没有更多内容

加载失败,请刷新页面

加载更多

你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
今天
2
0
祝大家节日快乐,阖家幸福! centos GnuTLS 漏洞

yum update -y gnutls 修复了GnuTLS 漏洞。更新到最新 gnutls.x86_64 0:2.12.23-22.el6 版本

yizhichao
昨天
5
0
Scrapy 1.5.0之选择器

构造选择器 Scrapy选择器是通过文本(Text)或 TextResponse 对象构造的 Selector 类的实例。 它根据输入类型自动选择最佳的解析规则(XML vs HTML): >>> from scrapy.selector import Sele...

Eappo_Geng
昨天
4
0
Windows下Git多账号配置,同一电脑多个ssh-key的管理

Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有...

morpheusWB
昨天
5
0
中秋快乐!!!

HiBlock
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部