Lucene基本示例和关键类介绍
本文由发表于5年前 | J2EE | 暂无评论 |  被围观 4,920 views+
1、Lucene简介2、简单的示例需要的Jar:3、几个关键词的解释:4、Lucene基本的包结构:5、在应用程序中使用Lucene的方法:
1、Lucene简介

Lucene是一个用Java写的全文索引引擎工具包,可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。

传统的数据库中的模糊查询 like %keyword% 是从数据库逐行匹配的,就像翻书一页页的查找需要的内容,所以效率也就自然很低了。而Lucene的全文索引指的是建立一个类似于科技索引一样的反向索引机制,将数据源排序存储,并提取出关键词并把关键词排好序,然后把关键词和文章映射好。所以检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合过程。全文检索问题归结到最后就是一个排序问题。

可以从官网下载最新的Lucene:

http://lucene.apache.org/core/
2、简单的示例

以下是官网给的一个简单的例子:

public class demo1 {

    public static void main(String[] args){
        Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);

        // Store the index in memory:
        Directory directory = new RAMDirectory();
        // To store an index on disk, use this instead:
        //Directory directory = FSDirectory.open("/tmp/testindex");
        IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_CURRENT, analyzer);
        IndexWriter iwriter;
        try {
            iwriter = new IndexWriter(directory, config);
            Document doc = new Document();
            String text = "This is the text to be indexed.";
            doc.add(new Field("fieldname", text, TextField.TYPE_STORED));
            iwriter.addDocument(doc);
            iwriter.close();

            // Now search the index:
            DirectoryReader ireader = DirectoryReader.open(directory);
            IndexSearcher isearcher = new IndexSearcher(ireader);
            // Parse a simple query that searches for "text":
            QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "fieldname", analyzer);
            Query query = parser.parse("text");
            ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs;
            System.out.println("hits num: " + hits.length);
            // Iterate through the results:
            for (int i = 0; i < hits.length; i++) {
              Document hitDoc = isearcher.doc(hits[i].doc);
              System.out.println("filename: " + hitDoc.get("fieldname"));
            }
            ireader.close();
            directory.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
需要的Jar:

You need four JARs: the Lucene JAR(lucene-core-{version}.jar), the queryparser JAR(lucene-queryparser-{version}.jar), the common analysis JAR(lucene-analyzers-common-{version}.jar), and the Lucene demo JAR(lucene-demo-{version}.jar).

3、几个关键词的解释:

分析器(analyzer)与分词器(tokenizer)和过滤器(tokenfilter)

analyzer主要包含分词器跟过滤器,他的功能是:将分词器跟分析器进行合理的组合,使之产生对文本分词和过滤效果。因此,分析器使用分词和过滤器构成一个管道,文本在“滤过”这个管道之后,就成为可以进入索引的最小单位。

tokenizer主要用于对文本资源进行切分,将文本规则切分为一个个可以进入索引的最小单元 3〉tokenfilter主要对分词器切分的最小单位进入索引进行预处理,如:大写转小写,复数转单数,也可以复杂(根据语义改写拼写错误的单词)

4、Lucene基本的包结构:

Lucene API被分到若干个包中:

1、org.apache.lucene.analysis:定义了一个抽象的(分析器)Analyzer API,用来把文本从一个Reader输入流,转换为TokenStream(分词流),这个分词流是一个分词属性的列举。分析器使用分词和过滤器构成一个管道,文本在“滤过”这个管道之后,就成为可以进入索引的最小单位。Analyzer主要包含Tokenizer(分词器)跟(TokenFilters)过滤器。 analyzers-common包含了一系列分析器的实现,包括StopAnalyzer 和grammar-based StandardAnalyzer。

2、org.apache.lucene.codecs:提供了一个反向索引结构的抽象,根据不同的应用需求,提供了不同的具体实现。

3、org.apache.lucene.document:提供了一个简单Document类,一个Document由一系列的Field组成,Field的值可能是字符串或者java.io.Reader的一个实例。

4、org.apache.lucene.index:提供了两个主要的类:IndexWriter 用来创建并添加documents到索引,以及IndexReader 用来访问索引数据。

5、org.apache.lucene.search:提供特定的数据结构(Query)来进行查询(如TermQuery用来进行词条查询,PhraseQuery用来进行多关键词搜索,BooleanQuery用来进行“与或”搜索)并提供了IndexSearcher用来把查询转换为TopDocs。提供了一系列的QueryParser用来解析查询结构。

6、org.apache.lucene.store:定义了一个抽象类Directory来存储持久化数据,一个用来由IndexOutput执行写操作和由IndexInput执行读操作的文件集合,提供了多种实现,包括使用文件系统目录来存放文件的FSDirectory和用在内存中创建目录,并在目录中添加和删除文件的RAMDirectory。

7、org.apache.lucene.util:包含了一些便捷的数据结构和辅助类,如OpenBitSet和PriorityQueue。

5、在应用程序中使用Lucene的方法:

1、创建一个Document对象,并添加Field

2、创建一个IndexWrite,并通过其addDocument()方法把上一步创建的Document对象添加到里面

3、调用QueryParser.parse(String keywords)方法来创建一个查询对象Query

4、创建一个IndexSearcher,并把上一步的Query对象传入IndexSearcher的search()方法进行查询

查看官方说明:

http://lucene.apache.org/core/4_0_0/core/overview-summary.html
除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/lucene-basic-examples-and-key-classes.html
关键字: ,
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2013 1/11
如果您有更好的原创技术博文或者观点,欢迎投稿:admin@itzhai.com,或者关注订阅左侧浮动面板的微信号订阅IT宅itread)发送消息。
文章评论
    没有评论
给我留言

有人回复时邮件通知我
J2EE的相关文章
随机文章 本月热门 热评
1 JavaScript设计模式笔记 – 单例模式 链式调用 2012/10/25
2 Git分布式文件管理工具与使用GitHub托管项目 2012/6/5
3 Javascript笔记 – Javascript中的正则表达式 2012/5/22
4 ExtJS拖放技术DragSource拖动到指定区域DDTarget 2011/4/13
5 C++语法笔记 – C++程序的结构 2011/9/3
6 拖延心理学笔记 2014/9/14
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
猜您喜欢
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.