浏览 8562 次
锁定老帖子 主题:Lucene简单介绍
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-16
使用Lucene作为搜索引擎,应用系统需要做两件事情:
(1)建立索引文件。下面给一个接口SearchManager来定义一般要用到的方法。
SearchManager代码如下:
java 代码
· IndexWriter用户建立新的索引,当然也可以将文档加入已经存在的索引。
在文本被索引之前,它必须通过一个分析器Analyzer。分析器Analyzer 负责从文本中分离出索引关键字。Lucene有几种不同类型的分析器:
· SimpleAnalyzer是将英文转换为小写字母,按空格和标点符号切分出英文单词,
如I am Java这一句,使用SimpleAnalyzer切词就会切分出下列词语:
token1=I
token2=am
token3=Java
· StandardAnalyzer是对英文进行了较为复杂的处理。除了按词语建立索引关键字(token)外,还能够为特殊名称、邮件地址、缩写格式等建立索引单元,而且对“and”、“ the”等词语做了过滤。
· ChineseAnalyzer是专门用来分析中文的索引的。关于中文分析器,有很多尝试,如车东的http://sourceforge.net/projects/weblucene/;等,该问题将在后面章节继续讨论。
一个索引是由一系列Document组成,每个Document是由一个或多个Field组成,每个Field都有一个名字和值,可以把Document作为关系数据库中一条记录,而Field则是记录中某列字段。一般建立索引如下:
java 代码
其中,Field根据具体要求有不同用法,Lucene提供4种类型的Field: Keyword、 UnIndexed、 UnStored和 Text。
· Keyword 不实现切词,逐字地保存在索引中,这种类型适合一些如URL、日期、个人姓名、社会安全号码、电话号码等需要原封不动保留的词语。
· UnIndexed既不实现切词也不索引,但是其值是一个词一个词地保存在索引中,这不适合很大很长的词语,适合于显示一些不经过直接搜索的结果值。
· UnStored与UnIndexed正好相反,将被切词和索引,但是不保存在索引中,这适合巨大文本,如帖子内容、页面内容等。
· Text是实现切词、索引,并且保存在索引中。
上面是建立或者添加索引,那么如何删除索引呢?
建立索引后,每个所有对应一个org.apache.lucene.index.Term对象,那么可以根据索引的KEYWORD创建一个Term对象,
然后: IndexReader reader = IndexReader.open(indexDir); 通过IndexReader的delete方法删除指定的索引 reader.delete(messageIDTerm); 这里,建立索引的时候,keyword名称指定为mID (2)建立完成后,就可以直接搜索特定的词语了。搜索语句一般代码如下:
Searcher searcher = new IndexSearcher((indexDir); //创建一个搜索器
也可以这样创建:
//使用和索引同样的语言分析器
Query query = QueryParser.parse(queryString, "body", new StandardAnalyzer());
//搜索结果使用Hits存储
Hits hits = searcher.search(query);
//通过hits得到相应字段的数据和查询的匹配度
for (int i=0; i
System.out.println(hits.doc(i).get("fieldname "));
};
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-11-16
继续,过滤器的使用
1、field的过滤器: Filter.add(new FieldFilter("字段名", 字段值)); 2、日期的过滤器: a、 Filter.add(new DateFilter("creationDate", beforeDate, afterDate)); b、 Filter.add(DateFilter.After("creationDate", afterDate)); c、 Filter.add(DateFilter.Before("creationDate", beforeDate)); 最后,将过滤器作为参数传入查询方法: searcher.search(query, Filter); |
|
返回顶楼 | |