专业文档搜索
手机娱乐 收藏夹 Flash吧 贴贴吧 文档库 Flash游戏 Flash动漫
Google
 
登录 |  注册  | 目录
Lucene 基础指南
于 2007-09-08 03:04:43.0 收藏在:生歌的网络收藏夹中。
 
评论
  Lucene是apache组织的一个用java实现全文搜索引擎的开源项目。其功能非常的强大,api也很简单。Lucene 其实很简单的,它最主要就是做两件事:建立索引和进行搜索

来看一些在lucene中使用的术语,这里并不打算作详细的介绍,提一下,让大家有一个大体上的了解。

建立索引时最重要的几个lucene的术语:

IndexWriter:lucene中最重要的的类之一,它主要是用来将文档加入索引,同时控制索引过程中的一些参数使用。

Analyzer:分析器,主要用于分析搜索引擎遇到的各种文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。

Directory:索引存放的位置;lucene提供了两种索引存放的位置,一种是磁盘,一种是内存。一般情况将索引放在磁盘上;相应地lucene提供了FSDirectory和RAMDirectory两个类。

Document:文档;Document相当于一个要进行索引的单元,任何可以想要被索引的文件都必须转化为Document对象才能进行索引。

Field:字段。Field是lucene比较多概念一个术语,相对其他术语而言是比较复杂的;
从源代码中,可以看出其构造函数如下:
{code}
Field(String name, byte[] value, Field.Store store)
Field(String name, Reader reader)
Field(String name, Reader reader, Field.TermVector termVector)
Field(String name, String value, Field.Store store, Field.Index index)
Field(String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector){code}

在Field当中有三个内部类:Field.Index,Field.Store,Field.termVector,而构造函数也用到了它们;其中termVector是Lucene 1.4.3新增的它提供一种向量机制来进行模糊查询,很少用。
Field.Index有四个属性,分别是Field.Index.NO_NORMS,Field.Index.NO,Field.Index.TOKENIZED,和Field.Index.UN_TOKENIZED;
Field.Store也有三个属性,分别是Field.Store.COMPRESS,Field.Store.YES和Field.Store.NO;

Field.Index和Field.Store两个字段的不同组合,有不同的用途常用的组合有:
{code}
Field.Index Field.Store 用途说明

TOKENIZED(分词) 是:YES 主要用来文档的标题和内容
TOKENIZED(分词) 是:YES 主要用来文档的标题和内容

TOKENIZED 否:NO 文档的内容
TOKENIZED 否:NO 文档的内容

UN_TOKENIZED 是/否:YES/NO 设置为不被分词,作为整体被搜索,搜其中的一部分是搜不出来的;不推荐使用。
UN_TOKENIZED 是/否:YES/NO 设置为不被分词,作为整体被搜索,搜其中的一部分是搜不出来的;不推荐使用。

NO 否:NO 暂时lucene中没有这一种用法
NO 否:NO 暂时lucene中没有这一种用法

NO 是:YES 内容不能被搜索,只是被搜索内容的附加特性:如文档的类型
NO 是:YES 内容不能被搜索,只是被搜索内容的附加特性:如文档的类型
{code}
上面所说的Field属性与lucene1.4.3版本的有比较大的不同,在旧版的1.4.3里lucene是通过Field.Keyword(...),FieldUnIndexed(...),FieldUnstored(...)和Field.Text(...)来设置不同字段的类型,以达到不同的用途,具体可以参考lucene官方的文档。
还有一点说明,其中的两个构造函数:
Field(String name, Reader reader)
Field(String name, Reader reader, Field.TermVector termVector)
看一下源代码就知道,其默认的值为Field.Store.NO和Field.Index.TOKENIZED。




下一步,再看一下lucene进行搜索时利用到几个最常用术语名称:
IndexSearcher:是lucene中最基本的检索工具,所有的检索都会用到IndexSearcher工具;

Query:查询,lucene中支持模糊查询,语义查询,短语查询,组合查询等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些类。

QueryParser: 是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成Query对象。

Hits:在搜索完成之后,需要把搜索结果返回并显示给用户,只有这样才算是完成搜索的目的。在lucene中,搜索的结果的集合是用Hits类的实例来表示的。


下面看一下一个简单的实例:
首先把lucene的包放在classpath路径中去,写下面一个简单的类:
{code}
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 springside 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("springside");
hits = searcher.search(query);
System.out.println("查找\"springside\" 共" + hits.length() + "个结果");

}
}
{code}
执行的结果:
查找"lighter" 共2个结果
查找"springside" 共1个结果

[收藏自:http://wiki.springside.org.cn/pages/diffpages.action?originalId=1689&pageId=1690] 查看原网页


评论
标题
内容
贴图
用户 你还没有登录,请从这里登录免费注册
验证码
   
   
生歌的收藏夹
共收藏了:
19 项精彩内容
51 个精彩图片
生歌的收藏分类
全部    html    java    js    linux    mysql    web    世锦赛    其它    台湾    展会    开源    房产    搞笑    数据库    新闻    深圳    管理    财金   
生歌的图片分类
全部    2007年冰灾    冰灾    台湾    图标    奥运    明星    李冰冰    湖南    美女    趣图    运动   
百度主题
生歌的热点收藏
淘宝热销的产品
Copyright (c) Yeegle.com 2003
耗时 203 毫秒