文档章节

lucene 3.5.0 入门笔记

6pker
 6pker
发布于 2015/02/26 11:43
字数 550
阅读 209
收藏 0
点赞 0
评论 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 liam.huang@foxmail.com
 */
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 liam.huang@foxmail.com
 */
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 个结果!






© 著作权归作者所有

共有 人打赏支持
6pker
粉丝 51
博文 98
码字总数 59361
作品 0
浦东
程序员
Lucene 3.5和Solr 3.5:大幅降低内存用量、SearcherManager和深度分页支持

Lucene项目管理委员会宣布Apache Lucene 3.5.0和Apache Solr 3.5.0已经可以使用。Lucene是一个高性能、支持全文搜索的文本搜索开发库。Solr是一个独立的搜索服务器,其核心使用了Lucene来做索...

墙头草 ⋅ 2012/02/03 ⋅ 7

Apache Solr 3.5 发布,全文搜索服务器

Apache Solr 3.5 发布了,该版本主要是配合 Lucene 3.5 版本而发布。 下载地址:http://www.apache.org/dyn/closer.cgi/lucene/solr 值得关注的改进内容有: Bug fixes and improvements fro...

红薯 ⋅ 2011/11/27 ⋅ 0

Apache Lucene 3.5 发布,Java 搜索引擎

Apache Lucene 3.5 发布了,该版本包含大量的bug修复、优化以及改进,下载地址: http://www.apache.org/dyn/closer.cgi/lucene/java 完整改进内容请看下载后的 CHANGES.txt 文件。 Lucene 3...

红薯 ⋅ 2011/11/27 ⋅ 5

Lucene 学习笔记(一)

最近,由于需要做到搜索功能,但是搜索功能里面,涉及的关系比较复杂,如果通过sql语言来查询,效率十分低下,所以便开始研究了下java开源搜索引擎lucene 。 Lucene入门起来了解其使用规则并...

WilsonET ⋅ 2013/07/25 ⋅ 0

Infinispan 7.0.0.Alpha4 发布

Infinispan 7.0.0 Alpha 4 发布了,值得关注的改进有: * HotRod 协议支持认证和 SKIP_CACHE_LOAD 参数; * Distributed entry iterator 可以迭代集群中所有条目; * 可使用查询 DSL 来进行对象...

红薯 ⋅ 2014/05/21 ⋅ 2

Solr配置与简单Demo

简介: solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目。它的官方网址在http://lucene.apache.org/solr/ 。solr需要运行在一个servlet 容器里,例如tomcat。sol...

liangxiao ⋅ 2013/04/08 ⋅ 0

Lucene In Action 读书笔记(一)

简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和...

林俊龙 ⋅ 2013/09/04 ⋅ 1

Maven的核心笔记(1)配置Maven环境变量

Maven是啥? 1.Maven是一种项目构建管理工具,自动下载架包。 2.目前主流的项目构建工具:Maven、Ant、gradle。 3.两个主要概念:坐标——构件,仓库。 一、maven的环境 1.Maven是基于项目对...

山月风成 ⋅ 2017/10/12 ⋅ 0

Lucene4入门(1)

Lucene4.4入门(1) Lucene主要分为三大块: 1、创建索引 2、分词 3、读取并查询索引 我们今天的入门主要讲创建索引和读取查询索引,使用的Lucene的版本是4.4。 第一步:创建一个java工程添加l...

一枚Sir ⋅ 2014/04/10 ⋅ 0

Lucene查询语法

译自http://www.lucenetutorial.com/lucene-query-syntax.html Lucene有其惯用的查询语法对其索引进行查询。下面用一些例子来说明其查询语法。 关键字匹配 检索条件为在title字段中包含“foo...

木木在路上 ⋅ 2015/02/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 2分钟前 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

java高级架构牛人 ⋅ 25分钟前 ⋅ 0

用户登录信息-钉子效果(基于jquery2.0)

本js效果使用jquery2.0,清晰的分解用户登录信息的(钉子效果),该效果直接用在作者网站(www.phpkhbd.com)上。 里面的难点有:定时器,延时。 大致效果如下: 一开始: 鼠标放上去的时候:...

宁哥实战课堂 ⋅ 26分钟前 ⋅ 0

解决yum安装报错Protected multilib versions

使用yum安装报错Protected multilib versions原因是因为多个库不能共存,不过更新的话也并不行,但是可以在安装命令后面加上如下一段命令: --setopt=protected_multilib=false 案例: 比如需...

北岩 ⋅ 37分钟前 ⋅ 0

为什么要学习Typescript???

简单来说 目前的typescript就是未来的javascript 为什么?? 这要从ECMA-262标准的第4版说起 对了 我们说的ES5 其实是ECMAScript3.1这个替代性建议被扶正了而已... 那么 第4版标准是什么? 看看...

hang1989 ⋅ 41分钟前 ⋅ 0

linux安装ipfs

一、下载ipfs # cd /usr/local/ipfs/ # wget https://dist.ipfs.io/go-ipfs/v0.4.15/go-ipfs_v0.4.15_linux-amd64.tar.gz # tar -zxvf go-ipfs_v0.4.15_linux-amd64.tar.gz 二、安装ipfs # ......

八戒八戒八戒 ⋅ 47分钟前 ⋅ 0

jvm程序执行慢诊断手册

生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长。本文分享,从业多年形成的排查守则。 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步。...

xpbob ⋅ 48分钟前 ⋅ 0

YII2 advanced 高级版本项目搭建-添加API应用以及多应用

一、YII安裝 安裝yii可以用composer安裝,也可以在yii中文社区下载归档文件安装 composer安装就不介绍了,因为要安装composer,比较麻烦,当然安装了composer是最好的,以后安装yii的插件要用...

botkenni ⋅ 48分钟前 ⋅ 0

在jdk1.8的环境下模拟永久代内存溢出

相信不少小伙伴在看深入理解Java虚拟机的时候,作者给我们举例一个demo来发生PermGen space 1、通过List不断添加String.intern(); 2、通过设置对应的-XX:PermSize与-XX:MaxPermSize(更快看到...

虾几把写 ⋅ 今天 ⋅ 0

开发OpenDaylight组件的完整流程

在前面介绍学习了OpenDaylight的几个重要模块后,这里再来介绍下完整开发一个模块的过程。 OSGI的bundles提供被其他OSGI组件调用的服务。这个教程中展示的是Data Packet Service去解析数据包...

wangxuwei ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部