`
tigers20010
  • 浏览: 48611 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

2010-01-05 传智播客—luncene/compass (转载)

阅读更多

如果大家对文章内容有不理解的地方,尽情留言或QQ(1357208561) 讨论。让大家共同进步。

                                                                                                                                                                                                                                                                                               ————tigers20010

北京好奇怪,昼夜温差很大,有点像月球。早起时窗上的冰霜很厚实,但到了白天阳光很足,风力很小,气温很好。大连现在确在降温,零下十几度,比较罕见。可能是我离开她一会,她却变冷了。呵呵~~

 

今日上午把lucene的高级部分给结束了。下午搞了一下CompassCompass是对lucene的封闭。因为lucene使用起来有些麻烦。

 

一、lucene高级

1.分词器

一般的分词器流程:

 
 
 

 


1)         输入文本:输入查询的内容。

2)         关键词切分:使用分词器取出关键词。

3)         去除停用词:去除没有多大意义的词,比如a,an,the,的,呢,吧。

4)         形态还原:将词的某种形态还原为原形,比如英文复数形式恢复到单数形式。

5)         转为小写:将英文转为小写,不区分大小写。

 

Lucene中的分词器

1)         单字分词:对应的类ChineseAnalyzer,将输入的字符串中的每个字做为关键字。比如“中国人加油!”,会被切分为“中”、“国”、“人”、“加”、“油”。(标点符号属于停用词)

2)         二分法分词:对应的类CJKAnalyzer,将输入的字符串以二分法分词。比如“中国人加油!”,会被切分为“中国”、“国人”、“人加”、“加油”这四个关键字。(标点符号属于停用词)

3)         词库分词:对应的类MMAnalyzer最为常用的分词器。比如“中国人加油!”,会被切分为“中国人”、“加油”。(标点符号属于停用词)

示例:

package cn.itcast.cc.anayzler;

 

import java.io.IOException;

import java.io.StringReader;

import jeasy.analysis.MMAnalyzer;

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.Token;

import org.apache.lucene.analysis.TokenStream;

import org.apache.lucene.analysis.cjk.CJKAnalyzer;

import org.apache.lucene.analysis.cn.ChineseAnalyzer;

import org.junit.Test;

 

public class AnalyzerTest {

 

    Analyzer anaylzer1 = new ChineseAnalyzer();// 单字分词

    Analyzer anaylzer2 = new CJKAnalyzer();// 二分分词法

    Analyzer anaylzer3 = new MMAnalyzer();// 词库分词

 

    @Test

    public void test() throws IOException {

        String str = "中国人加油!";

        printAnalyzer(anaylzer1, str);

        printAnalyzer(anaylzer2, str);

        printAnalyzer(anaylzer3, str);

    }

 

    private void printAnalyzer(Analyzer analyzer, String str)

            throws IOException {

        TokenStream tokenStream = analyzer.tokenStream("text", new StringReader(

                str));

        System.out.println("*****分词器->" + analyzer.getClass().getName() + ",将'"

                + str + "'切分为:");

        Token token = new Token();

        while ((token = tokenStream.next(token)) != null) {

            System.out.println(token);

        }

    }

}

 

2.高亮

Lucene的高亮器(Highlighter类)可以实现lucene的关键字高亮:

package cn.itcast.cc.highlighter;

 

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.document.*;

import org.apache.lucene.document.Field.*;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.index.IndexWriter.MaxFieldLength;

import org.apache.lucene.queryParser.*;

import org.apache.lucene.search.*;

import org.apache.lucene.search.highlight.*;

import org.apache.lucene.search.highlight.Scorer;

import org.junit.Test;

import jeasy.analysis.MMAnalyzer;

 

public class HighLighterTesst {

    private String path = "./index/";// lucene的索引数据被保存在这个目录中

    private Analyzer analyzer = new MMAnalyzer();// 词库分词器

 

    @Test

    public void test() {

        try {

            // 创建索引数据

            IndexWriter indexWriter = new IndexWriter(this.path, this.analyzer,

                    MaxFieldLength.LIMITED);

            Document doc = new Document();

            doc.add(new Field("content", "中国人民加油!", Store.YES, Index.ANALYZED));

            indexWriter.addDocument(doc);

            indexWriter.close();

            // 查询数据

            IndexSearcher indexSearcher = new IndexSearcher(this.path);

            QueryParser queryParser = new MultiFieldQueryParser(

                    new String[] { "content" }, this.analyzer);

            Query query = queryParser.parse("加油");

            TopDocs topDocs = indexSearcher.search(query, null, 10);

            // 创建高亮

            // SimpleHTMLFormatter的默认值为"<a></a>"

            Formatter formatter = new SimpleHTMLFormatter("<span>", "</span>");

            Scorer scorer = new QueryScorer(query);

            Highlighter highlighter = new Highlighter(formatter, scorer);

            // 打印结果

            for (ScoreDoc scoreDoc : topDocs.scoreDocs) {

                // 取出查询结果

                Document searchdoc = indexSearcher.doc(scoreDoc.doc);

                String searchstr = searchdoc.getField("content").stringValue();

                // 添加高亮

                String histr = highlighter.getBestFragment(this.analyzer,

                        "content", searchstr);

                System.out.println(histr);

            }

            indexSearcher.close();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

分享到:
评论

相关推荐

    基于Luncene的compass框架详解-java

    基于Lucene的Compass框架详解-Java 一、Compass框架概述 Compass是一个高性能的开源Java搜索引擎框架,旨在简化应用程序与搜索引擎之间的集成过程。它不仅利用了顶级的Lucene搜索引擎的强大功能,还融合了诸如...

    基于Java的Luncene的compass框架说明使用技术文档.pdf

    ### 基于Java的Luncene的Compass框架说明使用技术文档 #### 一、原理描述 Compass是一款优秀的开源Java搜索引擎框架,它能够帮助应用程序实现更为强大的搜索引擎语义能力。Compass依赖于顶级的Lucene搜索引擎,并...

    luncene.rar

    网上MMAnalyzer资源太少了,大多数初学者都会少导入JAR包,并且网上只有 je-analysis-MMAnalyzer的例子,而没有依赖包lucene-core-2.4.1.jar je-analysis-1.5.3.jar以及 luncene-heghlighter-2.4.1.jar

    Luncene2.0+Heritrix开发自己的搜索引擎01(源码)

    在构建一个自定义搜索引擎的过程中,Luncene 2.0 和 Heritrix 是两个关键的组件。Luncene 是一个流行的全文检索库,而 Heritrix 是一款强大的网络抓取工具,它们共同为搜索引擎的搭建提供了坚实的基础。下面将详细...

    Luncene API

    Luncene的API,详细接受了Luncene的使用方法

    Compass技术文档

    ### Compass技术文档详解 #### 一、原理描述 Compass是一个高级开源的Java搜索引擎框架,旨在简化应用程序与搜索引擎之间的集成过程。它通过结合强大的Lucene搜索引擎以及流行的应用框架如Hibernate和Spring,使得...

    luncene in action中文版

    luncene in action中文版 doc格式

    全文搜索luncene.Net

    **全文搜索Lucene.Net** Lucene.Net是一款开源的全文搜索引擎库,它为.NET开发者提供了强大的文本检索功能。作为Apache Lucene项目的.NET版本,它在.NET Framework上实现了原生Lucene的功能,使得.NET开发者也能...

    luncene api

    Apache Lucene是一个开源全文搜索引擎库,它为开发者提供了在各种应用程序中实现高级搜索功能所需的工具。Lucene API(Application Programming Interface)是这个库的核心部分,允许程序员与Lucene进行交互,构建...

    luncene jar包Java专用

    标题中的“luncene jar包Java专用”指的是专门为Java环境设计的Lucene库,以.jar文件形式提供,便于开发者集成到他们的项目中。这个库包含了所有必要的类和方法,使得开发人员能够构建自己的搜索引擎应用,对文本...

    luncene索引PDF、Html、word.txt

    #### 概述 Lucene是一款高性能、全功能的文本搜索引擎库,被广泛应用于多种场景下的全文检索应用开发中。... #### Lucene基础概念 在深入了解如何处理特定类型的文档之前,我们需要先了解几个基本概念: ...

    ASP.NET with Luncene.net

    ASP.NET与Lucene.NET是两个在开发领域中广泛使用的开源技术。ASP.NET是Microsoft推出的用于构建Web应用程序的框架,而Lucene.NET则是一个强大的全文搜索引擎库,被许多开发者用来为他们的应用添加高效的搜索功能。...

    luncene

    luncene 简单的开原项目

    luncene in action 003

    标题与描述均为“luncene in action 003”,但是需要注意的是正确的拼写应为“Lucene in Action”,这是一本介绍Apache Lucene的书籍。由于提供的部分内容仅包含了一些重复的试读版本声明及网址,并未提供具体的章节...

    Luncene2.0+Heritrix开发自己的搜索引擎

    在构建一个自定义搜索引擎的过程中,Luncene 2.0 和 Heritrix 是两个关键的开源工具。Luncene 是一款强大的全文搜索引擎库,而 Heritrix 是一个网络抓取工具,它们共同为创建一个完整的搜索解决方案提供了基础。 **...

    luncene.jar

    在给定的压缩包文件“luncene.jar”中,包含了三个重要的Lucene组件:lucene-core-3.0.3.jar、lucene-highlighter-3.0.1.jar和lucene-memory-3.0.1.jar,这些组件是构建高效搜索引擎的基础。 首先,我们来看一下`...

    java视频 黑马 27期

    CSS与JavaScript JavaScript JQuery基础与实战 BootStrap响应式页面开发 mysql回顾及多表操作 jdbc回顾 xml和Tomcat JavaWeb的核心技术 JDBC加强及案例 ...luncene/solr使用入门 redis 淘淘商城项目实战

    lucene笔记

    ### Lucene知识点详解 #### 一、Lucene简介 **1.1 什么是Lucene** Lucene是一个由Apache基金会维护的开源全文检索引擎工具包。它为开发者提供了一个简便的接口,使得在应用程序中实现高效的全文检索功能成为可能...

    luncene in action002

    根据提供的标题、描述、标签以及部分内容来看,似乎存在一定的误解,因为这些信息并没有提供关于“Lucene in Action002”具体内容的有效信息。“Lucene in Action”通常是一本书的名称,该书深入介绍了Apache Lucene...

Global site tag (gtag.js) - Google Analytics