lucene 3.5.0 入门笔记

1. lucene-3.5.0.jar

2. 新建目录C:\testsource,新建目录C:\testindex。

3.在C:\testsource下新建test1.txt, test2.txt,内容分别为:“商务休闲品牌男装西裤衬衫”,“潮流休闲品牌女装裙子大衣”。

4.创建索引

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
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;

/**
 * 给text文件建立索引
 * @author [email protected]
 */
public class TextFileIndexer {

	public static void main(String[] args) throws Exception{

		//text文件路径
		File sourceDir = new File("C:\\testsource");
		File[] sourceFiles = sourceDir.listFiles();

		//索引文件路径
		File indexDir = new File("C:\\testindex");
		Directory indexFilesDir = FSDirectory.open(indexDir);

		//构建analyzer
		Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);

		//配置IndexWriter
		IndexWriterConfig iwConfig = new IndexWriterConfig(Version.LUCENE_35, analyzer);
		iwConfig.setOpenMode(OpenMode.CREATE);

		//构建IndexWriter
		IndexWriter indexWriter = new IndexWriter(indexFilesDir, iwConfig);

		long startTime = new Date().getTime();
		for(int i=0; i<sourceFiles.length; i++){
			if(sourceFiles[i].isFile() && sourceFiles[i].getName().endsWith(".txt")){
				System.out.println("\nFile " + sourceFiles[i].getCanonicalPath() + "正在被索引......");
				String temp = fileReaderAll(sourceFiles[i].getCanonicalPath(), "UTF-8");
				System.out.println(temp);
				Field FieldPath = new Field("path", sourceFiles[i].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 document = new Document();
				document.add(FieldPath);
				document.add(FieldBody);
				indexWriter.addDocument(document);
			}
		}

		//关闭IndexWriter
		indexWriter.close();

		long endTime = new Date().getTime();
		System.out.println("\n花费了" + (endTime-startTime) + " 毫秒把文档增加到索引里面去!索引文件地址:" + sourceDir.getPath());
	}

	//读取文件所有内容
	private static String fileReaderAll(String filePath, String charset) throws IOException {
		String line = new String();
		String temp = new String();
		BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), charset));
		while((line=reader.readLine())!=null){
			temp += line;
		}
		reader.close();
		return temp;
	}

}

输出结果:

File C:\testsource\test1.txt正在被索引......
商务休闲品牌男装西裤衬衫

File C:\testsource\test2.txt正在被索引......
潮流休闲品牌女装裙子大衣

花费了569 毫秒把文档增加到索引里面去!索引文件地址:C:\testsource


5.关键字检索

import java.io.File;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.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.FSDirectory;
import org.apache.lucene.util.Version;

/**
 * 关键字检索
 * @author [email protected]
 */
public class TextQuery {

	public static void main(String[] args) throws Exception{

		String queryString = "休闲 装";

		//索引文件路径
		String indexDir = "C:\\testindex";
		IndexReader indexReader = IndexReader.open(FSDirectory.open(new File(indexDir)));
		IndexSearcher indexSearcher = new IndexSearcher(indexReader);

		Query query = null;
		Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
		QueryParser queryParser = new QueryParser(Version.LUCENE_35, "body", analyzer);
		queryParser.setDefaultOperator(QueryParser.AND_OPERATOR);
		query = queryParser.parse(queryString);

		ScoreDoc[] hits = null;
		if(indexSearcher!=null){
			//返回最多为10条记录
			TopDocs results = indexSearcher.search(query, 10);
			hits = results.scoreDocs;
			if(hits.length>0){
				System.out.println("找到:" + hits.length + " 个结果!");
			}else{
				System.out.println("没有找到");
			}
			indexSearcher.close();
		}

	}

}

输出结果:

找到:2 个结果!
时间: 2024-10-11 16:36:44

lucene 3.5.0 入门笔记的相关文章

lucene 5.2.0学习笔记

package com.bc.cas.manager; import com.bc.cas.dao.BookDao; import com.bc.cas.model.entity.Book; import com.google.common.base.Objects; import com.google.common.collect.Lists; import org.apache.log4j.helpers.LogLog; import org.apache.lucene.analysis.A

Spring3.0入门笔记(1)

这几天利用项目结项后的空隙,入门学习下Idea+maven+spring+springMVC.作为一个菜鸟,好记性不如烂笔头,在这里简要写下一些笔记. 1.idea里没有类似myeclipse的workspace的概念,与之类似的是project.同事一个project下可以有多个module,这里的module类似于myeclipse中的project. 2,maven是一个帮助构建(build)项目,管理jar包依赖的工具.它的使用和工作原理跟我现在用的myeclipse直接丢(引入)jar

MySQL入门笔记(一)

MySQL入门笔记(二) 一.数据类型 1. 整型 2. 浮点型 3. 字符型 4. 日期时间型 二.数据库操作 1. 创建库 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name; ??上述代码中DATABASE和SCHEMA完全相同,可任选一个(花括号内的参数为任选其一): ??添加IF NOT EXISTS的作用则是,若新建数据库的名称与已有数据库名称冲突,则产

Django入门笔记【一】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. 1. 查看Django是否安装及版本 1 $ python -c "import django; print(django.get_version())" 2. 创建一个项目(project) 通过cd方式进入自创目录,然后运行: 1 $ django-admin startprojec

Ajax 入门笔记

AJAX =Asynchronous Javascript + XML,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. XMLHttpRequest 是 AJAX 的基础.XMLHttpRequest 用于在后台与服务器交换数据.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 1:创建 XMLHttpRequest 对象 为

iBatis 入门笔记

iBatis简介 iBatis是一个"半自动"的轻量级O/R Mapping框架. O/R Mapping是指对象与数据库之间的映射,而iBatis就是这样一个映射器,映射器的主要作用是在对象和数据库之间搬运数据,同时保证对象.数据库和映射器之间相互独立. 通过O/R Mapping你将不用再面对那一堆令人厌恶的JDBC代码,为一堆打开连接.关闭连接的代码而眼花头昏. 何为"半自动"?    这里的半自动是与Hibernate这样的O/R Mapping方案对比得出

JAVA数据库编程(JDBC技术)-入门笔记

本菜鸟才介入Java,我现在不急着去看那些基本的语法或者一些Java里面的版本的特征或者是一些晋级的知识,因为有一点.Net的OOP编程思想,所以对于Java的这些语法以及什么的在用到的时候在去发现学习一下.我现在很迫不及待用JAVA想来实现以下对数据库的增删改查.想实现就来看Java是怎么操作数据库的,回想下.Net里你可能会配置web.Config,或者你去写一些DBhelper类然后调用里面的自己定义的一些增删改查的方法,更或者你去配一些数据控件等等往往发现操作基本都是一体化的简单.现在面

lucene.net 3.0.3、结合盘古分词进行搜索的小例子(转)

lucene.net 3.0.3.结合盘古分词进行搜索的小例子(分页功能) 添加:2013-12-25 更新:2013-12-26 新增分页功能. 更新:2013-12-27 新增按分类查询功能,调整索引行新增记录的图片字段. //封装类 [csharp] view plaincopyprint? using System; using System.Collections.Generic; using System.Linq; using System.Web; using Lucene.Ne

#1 SQL入门笔记(1)

今天的笔记主要讲解的是数据库的一些常识.和数据库的创建.创建数据库的方法都是差不多的,所以掌握了这个,创建数据库就Ok了(正常使用够了).当然在实际工作中用这个创建数据库还是比较少的.都是用建库工具(eg:PowerDesign)来设计数据库的. ---2014.07.29 常用的数据库: MS: SqlServer2008->.NETIBM: DB2 ->烟草..甲骨文: oracle ->银行,证券...非商业:MYSQL->IBM,Oracle->小型站点ACCESS,