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、简单的的StandardAnalyzer测试例子
-
package
lighter.javaeye.com;
-
-
import
java.io.IOException;
-
import
java.io.StringReader;
-
-
import
org.apache.lucene.analysis.Analyzer;
-
import
org.apache.lucene.analysis.Token;
-
import
org.apache.lucene.analysis.TokenStream;
-
import
org.apache.lucene.analysis.standard.StandardAnalyzer;
-
-
public
class
StandardAnalyzerTest
-
{
-
-
public
StandardAnalyzerTest()
-
{
-
}
-
public
static
void
main(String[]args)
-
{
-
-
AnalyzeraAnalyzer=
new
StandardAnalyzer();
-
-
StringReadersr=
new
StringReader(
"lighterjavaeyecomistheareon"
);
-
-
TokenStreamts=aAnalyzer.tokenStream(
"name"
,sr);
-
try
{
-
int
i=
0
;
-
Tokent=ts.next();
-
while
(t!=
null
)
-
{
-
-
i++;
-
-
System.out.println(
"第"
+i+
"行:"
+t.termText());
-
-
t=ts.next();
-
}
-
}
catch
(IOExceptione){
-
e.printStackTrace();
-
}
-
}
-
}
package lighter.javaeye.com;
import java.io.IOException;
import java.io.StringReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
public class StandardAnalyzerTest
{
//构造函数,
public StandardAnalyzerTest()
{
}
public static void main(String[] args)
{
//生成一个StandardAnalyzer对象
Analyzer aAnalyzer = new StandardAnalyzer();
//测试字符串
StringReader sr = new StringReader("lighter javaeye com is the are on");
//生成TokenStream对象
TokenStream ts = aAnalyzer.tokenStream("name", sr);
try {
int i=0;
Token t = ts.next();
while(t!=null)
{
//辅助输出时显示行号
i++;
//输出处理后的字符
System.out.println("第"+i+"行:"+t.termText());
//取得下一个字符
t=ts.next();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
显示结果:
引用
第1行:lighter
第2行:javaeye
第3行:com
提示一下:
StandardAnalyzer是lucene中内置的"标准分析器",可以做如下功能:
1、对原有句子按照空格进行了分词
2、所有的大写字母都可以能转换为小写的字母
3、可以去掉一些没有用处的单词,例如"is","the","are"等单词,也删除了所有的标点
查看一下结果与"new StringReader("lighter javaeye com is the are on")"作一个比较就清楚明了。
这里不对其API进行解释了,具体见lucene的官方文档。需要注意一点,这里的代码使用的是lucene2的API,与1.43版有一些明显的差别。
2、看另一个实例,简单地建立索引,进行搜索
-
package
lighter.javaeye.com;
-
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.queryParser.QueryParser;
-
import
org.apache.lucene.search.Hits;
-
import
org.apache.lucene.search.IndexSearcher;
-
import
org.apache.lucene.search.Query;
-
import
org.apache.lucene.store.FSDirectory;
-
-
public
class
FSDirectoryTest{
-
-
-
public
static
final
Stringpath=
"c:\\index2"
;
-
-
public
static
void
main(String[]args)
throws
Exception{
-
Documentdoc1=
new
Document();
-
doc1.add(
new
Field(
"name"
,
"lighterjavaeyecom"
,Field.Store.YES,Field.Index.TOKENIZED));
-
-
Documentdoc2=
new
Document();
-
doc2.add(
new
Field(
"name"
,
"lighterblog"
,Field.Store.YES,Field.Index.TOKENIZED));
-
-
IndexWriterwriter=
new
IndexWriter(FSDirectory.getDirectory(path,
true
),
new
StandardAnalyzer(),
true
);
-
writer.setMaxFieldLength(
3
);
-
writer.addDocument(doc1);
-
writer.setMaxFieldLength(
3
);
-
writer.addDocument(doc2);
-
writer.close();
-
-
IndexSearchersearcher=
new
IndexSearcher(path);
-
Hitshits=
null
;
-
Queryquery=
null
;
-
QueryParserqp=
new
QueryParser(
"name"
,
new
StandardAnalyzer());
-
-
query=qp.parse(
"lighter"
);
-
hits=searcher.search(query);
-
System.out.println(
"查找\"lighter\"共"
+hits.length()+
"个结果"
);
-
-
query=qp.parse(
"javaeye"
);
-
hits=searcher.search(query);
-
System.out.println(
"查找\"javaeye\"共"
+hits.length()+
"个结果"
);
-
-
}
-
-
}
package lighter.javaeye.com;
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.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.FSDirectory;
public class FSDirectoryTest {
//建立索引的路径
public static final String path = "c:\\index2";
public static void main(String[] args) throws Exception {
Document doc1 = new Document();
doc1.add( new Field("name", "lighter javaeye com",Field.Store.YES,Field.Index.TOKENIZED));
Document doc2 = new Document();
doc2.add(new Field("name", "lighter blog",Field.Store.YES,Field.Index.TOKENIZED));
IndexWriter writer = new IndexWriter(FSDirectory.getDirectory(path, true), new StandardAnalyzer(), true);
writer.setMaxFieldLength(3);
writer.addDocument(doc1);
writer.setMaxFieldLength(3);
writer.addDocument(doc2);
writer.close();
IndexSearcher searcher = new IndexSearcher(path);
Hits hits = null;
Query query = null;
QueryParser qp = new QueryParser("name",new StandardAnalyzer());
query = qp.parse("lighter");
hits = searcher.search(query);
System.out.println("查找\"lighter\" 共" + hits.length() + "个结果");
query = qp.parse("javaeye");
hits = searcher.search(query);
System.out.println("查找\"javaeye\" 共" + hits.length() + "个结果");
}
}
运行结果:
-
查找
"lighter"
共
2
个结果
-
查找
"javaeye"
共
1
个结果
查找"lighter" 共2个结果
查找"javaeye" 共1个结果
很久没有看lucene了,这两三天又复习了一下,上一些代码都是前几个月写的,只是改动了一些字符串和包名显示。转载时请说明,文章来自:http://lighter.javaeye.com。
如有什么错误的地方,恳请指出,谢谢。
分享到:
相关推荐
标题与描述:“Lucene简单入门程序实例”这一标题与描述明确指出文章将引导读者通过一个实际的示例来了解和掌握Lucene的基本操作。Lucene是一个高性能、全功能的文本搜索引擎库,它允许用户对文档进行索引和搜索。本...
**Lucene 搜索实例** Apache Lucene 是一个高性能、全文本搜索引擎库,它为开发者提供了在各种应用程序中实现全文检索的工具集。Lucene 并不是一个完整的应用,而是一个 Java 类库,可以被其他 Java 应用程序所使用...
以下是一个简单的Java代码示例,展示了如何创建和使用Lucene索引器: ```java import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache....
二、Lucene实例操作流程 1. 创建索引(Indexing):首先,我们需要创建一个索引Writer,然后添加文档到索引中。每个文档包含多个字段,每个字段都有其特定的属性,如是否可搜索、是否存储原始内容等。 ```java ...
以下是一个简单的示例代码,演示了如何使用Lucene搜索包含关键词"lucene"的文档: ```java public class TxtFileSearcher { public static void main(String[] args) throws Exception{ String queryStr = ...
二、Lucene 4.8 的新特性与改进 1. 更强的性能优化:Lucene 4.8 在索引和查询速度上进行了优化,提高了整体效率。 2. 分词器更新:对各种语言的分词器进行了升级,尤其是中文分词器,增强了对现代汉语的处理能力。...
这个“lucene小实例文件检索”旨在为初学者提供一个简单但完整的文件检索功能实现,帮助理解Lucene的基本工作原理和使用方法。 在Lucene中,文件检索主要涉及以下几个核心概念: 1. **索引(Index)**:在Lucene中...
在"Lucene简单实例"项目中,我们可能会遇到以下关键组件: 1. **Analyzer**:负责文本分析,定义如何处理输入的文本,如分词规则。 2. **IndexWriter**:用于创建和更新索引,它会管理索引的生命周期。 3. **...
通过实例,我们可以创建一个简单的索引器,将文本文件或数据库内容导入Lucene索引,然后编写一个搜索引擎来查询这些内容。这通常涉及以下步骤: - 创建索引:定义Document结构,使用Analyzer处理Field,通过...
经典的Lucene实例代码及详细解析以及Lucene结构流程介绍 Lucene是一个功能强大且灵活的开源搜索引擎库,它提供了一个简单易用的API,允许开发者快速构建搜索应用程序。下面将对Lucene的实例代码和结构流程进行详细...
在这个实例中,我们将探讨如何在 JDK 1.5 和 Lucene 3.0 的环境下构建和运行一个简单的搜索引擎。 首先,Lucene 的核心概念包括文档(Document)、字段(Field)、索引(Index)和搜索(Search)。文档是存储信息的...
标题 "第一个lucene的简单实例" 提到的是关于Apache Lucene的初步应用,这是一个全文搜索引擎库,常用于Java开发中。Lucene提供了高效的文本搜索功能,使得开发者能够快速地在大量数据中查找相关信息。 描述中的 ...
**基于Java的Lucene全文搜索引擎资源简单实例** Lucene是一个由Apache软件基金会开发的开源全文检索库,它为Java开发者提供了强大的文本搜索功能。Lucene是高性能、可扩展的信息检索库,可以集成到各种Java应用中,...
《Lucene 4.7 开发简单实例详解》 Lucene 是一款强大的全文搜索引擎库,广泛应用于各种信息检索系统中。在本实例中,我们将深入探讨Lucene 4.7版本,涵盖索引的创建、修改、删除,以及查询时的排序、分页、优化和...
对于初学者来说,通过学习这个简单实例,可以理解如何在较旧版本的Lucene中创建和使用索引。 **Lucene基本操作** 1. **创建索引**: Lucene的核心操作之一是创建索引。索引过程包括读取文档、分析文本、创建倒排...
在这个实例中,我们将深入探讨如何利用Lucene 2.0版本构建一个简单的搜索应用。 首先,我们需要理解Lucene的基本工作流程。这个流程通常包括以下几个步骤: 1. **创建索引**:这是使用Lucene的第一步,我们需将要...
Lucene 提供了一个简单的、可扩展的 API,使得开发者可以方便地在应用程序中集成全文搜索功能。这个“Lucene 开发实例”可能是为了帮助开发者快速理解和实践 Lucene 的基本操作。 Lucene 的核心功能包括文档索引、...
总而言之,《Lucene实战第二版》是一本内容全面、实例丰富、实用性强的参考书籍,它不仅教会读者如何快速掌握Lucene,而且提供了深入理解全文检索技术的宝贵资料,是一本不可多得的教程和参考书。