lucene 例子,lucene demo, lucene 教程

查了很多lucene资料,就纳闷为啥不能分享个简单的例子,我在这里自己写了一个

lucene实现其实很简单,先建立索引,在进行搜索,easy!

下载jar包,链接在这里:http://download.csdn.net/detail/dannor2010/8183641   项目中导入lib即可,不多说了。

前期:创建两个txt文件,

C:\\source
C:\\index

source 中建立txt文件,输入你想要测试搜索的String类型内容。


1、建立索引,代码如下

package com.ch.lucene;

import java.io.File;
import java.io.FileReader;
import java.util.Date;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

import com.ch.util.FileUtil;

public class TextFileIndexer {

	@SuppressWarnings("deprecation")
	public static void main(String[] args) throws Exception {
		File fileDir = new File("C:\\source");
		File fileIndex = new File("C:\\index");

		Directory dir = FSDirectory.open(fileIndex);

		Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_45);

		IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_45,
				luceneAnalyzer);

		iwc.setOpenMode(OpenMode.CREATE);

		IndexWriter iw = new IndexWriter(dir, iwc);

		File[] textFiles = fileDir.listFiles();
		long startTime = new Date().getTime();

		// 增加document到索引去
		for (File file : textFiles) {
			if (file.isFile() && file.getName().endsWith(".txt")) {
				System.out
						.println("文件:" + file.getCanonicalPath() + "正在被索引操作。");
				String temp = FileUtil.readTxtFile(file.getPath());
				System.out.println(temp);
				Document document = new Document();
				@SuppressWarnings("unused")
				Field filepath = new Field("path", file.getPath(),
						Field.Store.YES, Field.Index.NO);
				Field FieldBody = new Field("body", temp, Field.Store.YES,
						Field.Index.ANALYZED,
						Field.TermVector.WITH_POSITIONS_OFFSETS);
				document.add(filepath);
				document.add(FieldBody);
				iw.addDocument(document);
			}
		}
		iw.close();

		// 测试一下索引的时间
		long endTime = new Date().getTime();
		System.out.println("这花费了" + (endTime - startTime) + " 毫秒来把文档增加到索引里面去"
				+ fileDir.getPath());
	}
}

2、进行搜索,代码如下

package com.ch.lucene;

import java.io.File;
import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class Query {
	public static void main(String[] args) throws IOException, ParseException {
		String index = "C:\\index";
		@SuppressWarnings("deprecation")
		IndexReader reader = IndexReader
				.open(FSDirectory.open(new File(index)));
		IndexSearcher searcher = new IndexSearcher(reader);
		ScoreDoc[] hits = null;
		String queryString = "关键词"; // 搜索的关键词
		Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_45);
		QueryParser qp = new QueryParser(Version.LUCENE_45, "body", analyzer);
		org.apache.lucene.search.Query query = qp.parse(queryString);

		if (searcher != null) {
			TopDocs results = searcher.search(query, 10);
			hits = results.scoreDocs;
			if (hits.length > 0) {
				System.out.println("找到:" + hits.length);
			}
		}

	}

}
时间: 2024-08-07 01:52:22

lucene 例子,lucene demo, lucene 教程的相关文章

一步一步跟我学习lucene(16)---lucene搜索之facet查询查询示例(2)

本篇是接一步一步跟我学习lucene(14)---lucene搜索之facet索引原理和facet查询实例(http://blog.csdn.net/wuyinggui10000/article/details/45973769),上篇主要是统计facet的dim和每个种类对应的数量,个人感觉这个跟lucene的group不同的在于facet的存储类似于hash(key-field-value)形式的,而group则是单一的map(key-value)形式的,虽然都可以统计某一品类的数量,显然f

一步一步跟我学习lucene(15)---lucene搜索之正则表达式查询RegExQuery和手机邮箱查询示例

今天快下班的时候收到了一个群友的问题,大意是读取文本文件中的内容,找出文件中的手机号和邮箱,我自己写了一个读取文档的内容的正则查询示例,用于匹配文件中是否含有邮箱或者手机号,这个等于是对之前的文本处理工具的一个梳理,同时结合lucene内部提供的正则匹配查询RegexQuery: 废话不多说了,直接上代码,这里先对文件内容读取分类处理,分为pdf word excel 和普通文本四类,不同的种类读取文本内容不一样 pdf利用pdfbox读取内容,word和excel利用poi进行读取内容,文本文

一步一步跟我学习lucene(6)---lucene索引优化之多线程创建索引

这两天工作有点忙,博客更新不及时,请大家见谅: 前面了解到lucene在索引创建的时候一个IndexWriter获取到一个读写锁,这样势在lucene创建大数据量的索引的时候,执行效率低下的问题: 查看前面文档一步一步跟我学习lucene(5)---lucene的索引构建原理可以看出,lucene索引的建立,跟以下几点关联很大: 磁盘空间大小,这个直接影响索引的建立,甚至会造成索引写入提示完成,但是没有同步的问题: 索引合并策略的选择,这个类似于sql里边的批量操作,批量操作的数量过多直接影响执

lucene 4.4 demo

ackage com.zxf.demo; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import

【Lucene】详解Lucene全文检索的信息写入与读取

Lucene的大致结构图: 信息写入索引库的过程: 读取信息的过程: 下面是一个向索引库写入信息与读取信息的例子: public void testCreateIndex() throws Exception{ /** * 1.创建一个student对象,并且把信息存放进去 * 2.调用indexWriter的API把数据存放在索引库中 * 3.关闭indexWriter */ // 创建一个Student对象,并且把信息存放进去 Student student = new Student();

一步一步跟我学习lucene(13)---lucene搜索之自定义排序的实现原理和编写自己的自定义排序工具

自定义排序说明 我们在做lucene搜索的时候,可能会需要排序功能,虽然lucene内置了多种类型的排序,但是如果在需要先进行某些值的运算然后在排序的时候就有点显得无能为力了: 要做自定义查询,我们就要研究lucene已经实现的排序功能,lucene的所有排序都是要继承FieldComparator,然后重写内部实现,这里以IntComparator为例子来查看其实现: IntComparator相关实现 其类的声明为 public static class IntComparator exte

一步一步跟我学习lucene(14)---lucene搜索之facet查询原理和facet查询实例

Facet说明 我们在浏览网站的时候,经常会遇到按某一类条件查询的情况,这种情况尤以电商网站最多,以天猫商城为例,我们选择某一个品牌,系统会将该品牌对应的商品展示出来,效果图如下: 如上图,我们关注的是品牌,选购热点等方面,对于类似的功能我们用lucene的term查询当然可以,但是在数据量特别大的情况下还用普通查询来实现显然会因为FSDirectory.open等耗时的操作造成查询效率的低下,同时普通查询是全部document都扫描一遍,这样显然造成了查询效率低: lucene提供了facet

Lucene学习之四:Lucene的索引文件格式(2)

本文转载自:http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623599.html  略有删减和补充 四.具体格式 上面曾经交代过,Lucene保存了从Index到Segment到Document到Field一直到Term的正向信息,也包括了从Term到Document映射的反向信息,还有其他一些Lucene特有的信息.下面对这三种信息一一介绍. 4.1. 正向信息 Index –> Segments (segments.gen,

Lucene学习之四:Lucene的索引文件格式(3)

本文转载自:http://www.cnblogs.com/forfuture1978/archive/2010/02/02/1661436.html ,略有删改和备注. 四.具体格式 4.2. 反向信息 反向信息是索引文件的核心,也即反向索引. 反向索引包括两部分,左面是词典(Term Dictionary),右面是倒排表(Posting List). 在Lucene中,这两部分是分文件存储的,词典是存储在tii,tis中的,倒排表又包括两部分,一部分是文档号及词频,保存在frq中,一部分是词的