- 浏览: 101503 次
- 性别:
- 来自: 武汉
最新评论
-
yuanyuanhere:
这个方法是不是有问题啊
我的格式定义也是这样,如果date1是 ...
JAVA Date.after方法的时间定时应用 -
flyingpig4:
你说的smartChineseAnalyze是基于词库分表的吧 ...
lucene2.9 中文分词学习和SmartChineseAnalyzer的用法 -
javamanlcy007:
如果访问量很大,数据写入过于频繁,数据库会不会崩溃?
点击率统计mysql 自动加1 -
liuzm:
smallsnake 写道qyhdt 写道 不知道lz对 ...
lucene 入门学习,简单实例模访google搜索 -
smallsnake:
qyhdt 写道 不知道lz对lucene理解达到什么层 ...
lucene 入门学习,简单实例模访google搜索
自己在网上学习 lucene 经测试后.发布到自己的博客上来
开发之间一定要有 lucene包 哦
然后看下子语法:
IndexWriter:lucene中最重要的的类之一,它主要是用来将文档加入索引,同时控制索引过程中的一些参数使用。
Analyzer:分析器,主要用于分析搜索引擎遇到的各种文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。
Directory:索引存放的位置;lucene提供了两种索引存放的位置,一种是磁盘,一种是内存。一般情况将索引放在磁盘上;相应地lucene提供了FSDirectory和RAMDirectory两个类。
Document:文档;Document相当于一个要进行索引的单元,任何可以想要被索引的文件都必须转化为Document对象才能进行索引。
Field:字段。
IndexSearcher:是lucene中最基本的检索工具,所有的检索都会用到IndexSearcher工具;
Query:查询,lucene中支持模糊查询,语义查询,短语查询,组合查询等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些类。
QueryParser: 是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成Query对象。
Hits:在搜索完成之后,需要把搜索结果返回并显示给用户,只有这样才算是完成搜索的目的。在lucene中,搜索的结果的集合是用Hits类的实例来表示的。
步骤好如下:
1、在windows系统下的的C盘,建一个名叫liuzm的文件夹(这文件由你的程序定,因为在下面的程序
中我用的是liuzm这个文件),在该文件夹里面随便建2个txt文件,随便起名啦,就叫"1.txt","2.txt"
txt 理面的文档 输入"刘志猛博客 www.liuzm.com"
准备工作完成 开始建立索引:
public static void main(String[] args) throws Exception {
/**//* 指明要索引文件夹的位置,这里是C盘的liuzm文件夹下
* 只是为了方便测试.所以文件是自己写的,在此目录下 建1.txt 2.txt
* */
File fileDir = new File("c:\\liuzm");
/**//* 这里放索引文件的位置 */
File indexDir = new File("c:\\index");
Analyzer luceneAnalyzer = new StandardAnalyzer();
IndexWriter indexWriter = new IndexWriter(indexDir, luceneAnalyzer,
true);
//第一个参数:索引存放在什么地方
// 第二个参数:分析器,继承自org.apache.lucene.analysis.Analyzer类
// 第三个参数:为true时,IndexWriter不管目录内是否已经有索引了,一律清空,重新建立;当为false时,则IndexWriter会在原有基础上增量添加索引。所以在更新的过程中,需要设置该值为false。
File[] textFiles = fileDir.listFiles();
long startTime = new Date().getTime();
//增加document到索引去
for (int i = 0; i < textFiles.length; i++) {
if (textFiles[i].isFile()
&& textFiles[i].getName().endsWith(".txt")) {
System.out.println("File " + textFiles[i].getCanonicalPath()
+ "正在被索引.");
String temp = FileReaderAll(textFiles[i].getCanonicalPath(),
"GBK");
System.out.println(temp);
Document document = new Document();
Field FieldPath = new Field("path", textFiles[i].getPath(),
Field.Store.YES, Field.Index.NO);
Field FieldBody = new Field("body", temp, Field.Store.YES,
Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
document.add(FieldPath);
document.add(FieldBody);
indexWriter.addDocument(document);
}
}
//optimize()方法是对索引进行优化
indexWriter.optimize();
indexWriter.close();
//测试一下索引的时间
long endTime = new Date().getTime();
System.out
.println("这花费了"
+ (endTime - startTime)
+ " 毫秒来把文档增加到索引里面去!"
+ fileDir.getPath());
}
public static String FileReaderAll(String FileName, String charset)
throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(FileName), charset));
String line = new String();
String temp = new String();
while ((line = reader.readLine()) != null) {
temp += line;
}
reader.close();
return temp;
}
然后就是查询:
public static void main(String[] args) throws IOException, ParseException {
Hits hits = null;
String queryString = "刘志猛";
Query query = null;
IndexSearcher searcher = new IndexSearcher("c:\\index");
Analyzer analyzer = new StandardAnalyzer();
try {
QueryParser qp = new QueryParser("body", analyzer);
try {
query = qp.parse(queryString);
// 以下 是评分机制 的代码.等看懂这个例子后,可以把注销代码删了
// hits = searcher.search(query);
// for(int i=0;i<hits.length();i++){
// Explanation explanation = searcher.explain(query,hits.id(i));
// System.out.println("得分"+hits.score(i));
// System.out.println("具体情况"+explanation);
// System.out.println("长度"+hits.length());
//
// }
} catch (org.apache.lucene.queryParser.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ParseException e) {
}
if (searcher != null) {
hits = searcher.search(query);
if (hits.length() > 0) {
System.out.println("找到:" + hits.length() + " 个结果!");
}
else{
System.out.print("没有找到!!!!!!!!");
}
}
}
结果是:找到:2 个结果!这个例子只是一个入门,让刚刚接觛的人了解下lucene 搜索
本篇文章来源于 :刘志猛博客 原文链接:http://www.liuzm.com/article/java/9114.htm
更多请关注官方博客:http://www.liuzm.com
开发之间一定要有 lucene包 哦
然后看下子语法:
IndexWriter:lucene中最重要的的类之一,它主要是用来将文档加入索引,同时控制索引过程中的一些参数使用。
Analyzer:分析器,主要用于分析搜索引擎遇到的各种文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。
Directory:索引存放的位置;lucene提供了两种索引存放的位置,一种是磁盘,一种是内存。一般情况将索引放在磁盘上;相应地lucene提供了FSDirectory和RAMDirectory两个类。
Document:文档;Document相当于一个要进行索引的单元,任何可以想要被索引的文件都必须转化为Document对象才能进行索引。
Field:字段。
IndexSearcher:是lucene中最基本的检索工具,所有的检索都会用到IndexSearcher工具;
Query:查询,lucene中支持模糊查询,语义查询,短语查询,组合查询等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些类。
QueryParser: 是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成Query对象。
Hits:在搜索完成之后,需要把搜索结果返回并显示给用户,只有这样才算是完成搜索的目的。在lucene中,搜索的结果的集合是用Hits类的实例来表示的。
步骤好如下:
1、在windows系统下的的C盘,建一个名叫liuzm的文件夹(这文件由你的程序定,因为在下面的程序
中我用的是liuzm这个文件),在该文件夹里面随便建2个txt文件,随便起名啦,就叫"1.txt","2.txt"
txt 理面的文档 输入"刘志猛博客 www.liuzm.com"
准备工作完成 开始建立索引:
public static void main(String[] args) throws Exception {
/**//* 指明要索引文件夹的位置,这里是C盘的liuzm文件夹下
* 只是为了方便测试.所以文件是自己写的,在此目录下 建1.txt 2.txt
* */
File fileDir = new File("c:\\liuzm");
/**//* 这里放索引文件的位置 */
File indexDir = new File("c:\\index");
Analyzer luceneAnalyzer = new StandardAnalyzer();
IndexWriter indexWriter = new IndexWriter(indexDir, luceneAnalyzer,
true);
//第一个参数:索引存放在什么地方
// 第二个参数:分析器,继承自org.apache.lucene.analysis.Analyzer类
// 第三个参数:为true时,IndexWriter不管目录内是否已经有索引了,一律清空,重新建立;当为false时,则IndexWriter会在原有基础上增量添加索引。所以在更新的过程中,需要设置该值为false。
File[] textFiles = fileDir.listFiles();
long startTime = new Date().getTime();
//增加document到索引去
for (int i = 0; i < textFiles.length; i++) {
if (textFiles[i].isFile()
&& textFiles[i].getName().endsWith(".txt")) {
System.out.println("File " + textFiles[i].getCanonicalPath()
+ "正在被索引.");
String temp = FileReaderAll(textFiles[i].getCanonicalPath(),
"GBK");
System.out.println(temp);
Document document = new Document();
Field FieldPath = new Field("path", textFiles[i].getPath(),
Field.Store.YES, Field.Index.NO);
Field FieldBody = new Field("body", temp, Field.Store.YES,
Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
document.add(FieldPath);
document.add(FieldBody);
indexWriter.addDocument(document);
}
}
//optimize()方法是对索引进行优化
indexWriter.optimize();
indexWriter.close();
//测试一下索引的时间
long endTime = new Date().getTime();
System.out
.println("这花费了"
+ (endTime - startTime)
+ " 毫秒来把文档增加到索引里面去!"
+ fileDir.getPath());
}
public static String FileReaderAll(String FileName, String charset)
throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(FileName), charset));
String line = new String();
String temp = new String();
while ((line = reader.readLine()) != null) {
temp += line;
}
reader.close();
return temp;
}
然后就是查询:
public static void main(String[] args) throws IOException, ParseException {
Hits hits = null;
String queryString = "刘志猛";
Query query = null;
IndexSearcher searcher = new IndexSearcher("c:\\index");
Analyzer analyzer = new StandardAnalyzer();
try {
QueryParser qp = new QueryParser("body", analyzer);
try {
query = qp.parse(queryString);
// 以下 是评分机制 的代码.等看懂这个例子后,可以把注销代码删了
// hits = searcher.search(query);
// for(int i=0;i<hits.length();i++){
// Explanation explanation = searcher.explain(query,hits.id(i));
// System.out.println("得分"+hits.score(i));
// System.out.println("具体情况"+explanation);
// System.out.println("长度"+hits.length());
//
// }
} catch (org.apache.lucene.queryParser.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ParseException e) {
}
if (searcher != null) {
hits = searcher.search(query);
if (hits.length() > 0) {
System.out.println("找到:" + hits.length() + " 个结果!");
}
else{
System.out.print("没有找到!!!!!!!!");
}
}
}
结果是:找到:2 个结果!这个例子只是一个入门,让刚刚接觛的人了解下lucene 搜索
本篇文章来源于 :刘志猛博客 原文链接:http://www.liuzm.com/article/java/9114.htm
更多请关注官方博客:http://www.liuzm.com
发表评论
-
JAVA插入数据库时java.sql.DataTruncation: Data truncation
2010-05-21 16:42 923今天在做SQL2000的数据库数据交换下,报java.sql. ... -
我的官方博客,欢迎大家来访
2010-02-26 14:36 847http://liuzhimeng.com/ 关注java,, ... -
用Eclipse开发J2ME手机游戏入门(创建Hello)
2010-01-30 09:42 911http://www.liuzm.com/article/ja ... -
通过项目了解Calendar 时间日期应用
2010-01-30 09:41 2016通过项目了解Calendar 应用,这是自己写的一个小小的功能 ... -
JAVA插入数据库时java.sql.DataTruncation: Data truncation
2010-01-30 09:39 1915今天在做SQL2000的数据库数据交换下,报java.sql. ... -
java 时间求星期几
2010-01-30 09:38 1510在java项目中,时间是永远都不离不开的,不管什么项目,都有时 ... -
JAVA抽象类和接口的区别
2010-01-25 14:56 791这篇文章对抽象类和接 ... -
java四种操作xml方式的比较
2010-01-25 14:54 7461. 介绍 1)DOM(JAXP Crimson ... -
XML使用的五种场合
2010-01-25 14:53 738在很多研讨会和培训班 ... -
61条面向对象设计的经验原则
2010-01-25 14:52 58161条面向对象设计的经验原则: (1)所有数据都应该隐 ... -
JAVA - IO初步认识
2010-01-25 14:51 803IO 有初步认识,对IO包的学习引导 什么是IO ----- ... -
java调用windows 下dos命令
2010-01-25 14:48 899最近没事,想用JAVA写点调用WIN 的DOS命令 以下是我自 ... -
jsp使用URL传递中文参数乱码问题
2010-01-21 09:53 1469在项目中怎么解决参数乱码问题呢? 如下就是我在项目中解决的问题 ... -
HashTable和HashMap的区别
2010-01-21 09:52 1270HashTable和HashMap的区别 HashTable的 ... -
Java--List和Set
2010-01-21 09:51 1275List和Set的用法 容器类可以大大提高编程效率和编程能力, ... -
JAVA:String类、StringBuffer类、Math类。
2010-01-21 09:48 1025JAVA:String类、StringBuffer类、Math ... -
使用String.split方法时要注意
2010-01-21 09:47 586使用String.split方法时要注意的问题 在使用Stri ... -
Hibernate中DetachedCriteria和Criteria的完整用法
2010-01-21 09:46 1158Hibernate中DetachedCriteria和Crit ... -
java replaceAll用法-模仿Google搜索关键字变红
2010-01-21 09:41 2214replaceAll用法-模仿Google搜索关键字变红 下面 ... -
java 求随机6个字符串
2010-01-19 14:51 893在项目中是不是常用到 随机数? 如下代码是 求随机6个字符串 ...
相关推荐
【Lucene 入门教程】 Lucene 是一个由Apache软件基金会开发的开源全文检索引擎工具包,它并非一个完整的搜索引擎,而是提供了一个强大的架构,允许开发人员轻松地在他们的应用程序中集成全文检索功能。Lucene 支持...
在Java开发中,搜索引擎已经成为不可或缺的一部分,而Apache Lucene正是一个强大的全文搜索引擎库。这篇博文将带你深入理解Lucene的基本概念和使用方式,帮助你快速入门并掌握其核心功能。 1. **Lucene简介** ...
`lucene入门小实例.txt` 文件中可能包含了一个简单的Lucene使用示例,例如: 1. 创建 `Directory` 对象,比如使用 `FSDirectory.open()` 打开一个文件系统的目录来存储索引。 2. 实例化 `Analyzer`,如使用 `...
doc.add(new Field("title", "Lucene入门", Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("content", "这是Lucene 3.0的实例", Field.Store.YES, Field.Index.ANALYZED)); ``` 3. **查询...
标题与描述:“Lucene简单入门程序实例”这一标题与描述明确指出文章将引导读者通过一个实际的示例来了解和掌握Lucene的基本操作。Lucene是一个高性能、全功能的文本搜索引擎库,它允许用户对文档进行索引和搜索。本...
以上是Lucene入门的基本知识和关键概念,通过深入学习和实践,你可以掌握如何利用Lucene构建强大的全文搜索引擎。记住,实践中遇到的问题往往是最好的学习资源,不断尝试和解决,你将逐渐成为Lucene的专家。
Apache Lucene是一个高性能、全文本搜索库,由Java编写,被广泛应用于各种搜索引擎的开发中。这个入门实例将引导我们了解如何使用Lucene 3.0版本进行基本的索引和搜索操作。以下是对Lucene 3.0关键知识点的详细讲解...
- **接触Lucene**:介绍Lucene的基本概念和技术特点,适合初学者入门。 - **索引**:详解如何使用Lucene建立文档索引,包括索引的结构设计、存储策略等。 - **为程序添加搜索功能**:讲解如何将Lucene集成到现有的...
这个“Lucene入门demo”将帮助我们理解如何使用 Lucene 进行基本的索引和搜索操作。 **一、Lucene 的核心概念** 1. **索引(Indexing)**: 在 Lucene 中,索引是文档内容的预处理结果,类似于数据库中的索引。通过...
**正文** Lucene.Net是一个基于Apache Lucene的开源全文搜索引擎库,它被移植到...教程可能涵盖从安装步骤、基本概念介绍,到实战案例的详细讲解,帮助初学者快速入门并熟练运用Lucene.Net进行全文搜索引擎的开发。
2. **Lucene入门**:解释Lucene的核心概念,如Document、Field、Analyzer和IndexWriter,以及如何建立和管理索引。 3. **Struts与Lucene整合**:演示如何在Struts的Action类中调用Lucene进行搜索,以及如何在JSP页面...
标题 "第一个lucene的简单实例" 提到的是关于Apache Lucene的初步应用,这是一个全文搜索引擎库,常用于Java开发中。Lucene提供了高效的文本搜索功能,使得开发者能够快速地在大量数据中查找相关信息。 描述中的 ...
- **书籍推荐**:《Lucene in Action》是一本非常优秀的Lucene入门书籍,详细介绍了Lucene的核心概念和技术细节。 通过上述内容的学习,读者能够系统地掌握Lucene的基本原理、核心技术及应用场景,为进一步开发基于...
《Lucene 3.0 入门:搜索引擎开发的基础指南》 Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会维护。它为开发者提供了在各种应用程序中实现全文索引和搜索功能的强大工具。Lucene 3.0 版本是其历史上的...
【标题】:“第一个Lucene 3.6 (3.X) 入门实例” ...总之,Lucene 3.6入门实例涉及从设置开发环境、创建索引到实现搜索功能的全过程。理解这些基本步骤和核心概念,是掌握Lucene并进一步构建高效检索系统的基石。
### Lucene快速入门知识点 #### 1. Lucene简介 ##### 1.1 Lucene的历史 - **创始人**: Lucene由一位资深的全文索引/检索专家开发。 - **开源历程**: 最初发布在其个人主页上,2001年10月捐赠给Apache基金会,成为...
**Lucene入门示例** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它提供了文本分析、索引创建、文档检索等核心功能,广泛应用于各种搜索应用的开发。本文将从一个简单的Lucene入门示例出发,...
3. **Lucene的应用实例**:多个知名项目如Jive(Web论坛系统)、Eyebrows(邮件列表归档系统)、Cocoon(基于XML的Web发布框架)以及Eclipse(Java开发平台)都使用了Lucene作为全文索引引擎。 4. **支持中文全文...
**Lucene 3.0 全文检索入门实例** Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发。它提供了一个高级、灵活的搜索功能框架,允许开发者在自己的应用中轻松地集成全文检索功能。本文将重点介绍如何使用 ...