`
wezly
  • 浏览: 484607 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Lucene版Hello world

阅读更多

1、首先从lucene官网上下载lucene2.4.0(也可以点击直接下载,我这里用的这个版本,现在最高版本是3.0

2、从极易软件下载极易分词器jar包(为汉语的世界,你好提供支持)

3、Eclipse中新建Java工程,并将所需jar包(lucene-core-2.4.0.jar,lucene-analyzer-2.4.0.jar,lucene-highlighter-2.4.0.jar,je-analysis-1.5.3.jar)加入工程

4、差不多该开始了,在开始之前还需要建立两个文件夹,我这里是luceneDataSource放文件(用来建立索引库),luceneIndexs(存放索引库的位置),最终的结构是:



 

5、好,我们开始,首先建立HelloWorld类,类里有两个方法createIndexsearch分别是创建索引库和搜索,搜索出来的结果高亮显示,具体实现为:

 

package com.lucene.helloworld;

import java.util.logging.SimpleFormatter;

import jeasy.analysis.MMAnalyzer;

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.standard.StandardAnalyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.index.IndexWriter;

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

import org.apache.lucene.queryParser.MultiFieldQueryParser;

import org.apache.lucene.queryParser.QueryParser;

import org.apache.lucene.search.Filter;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.search.Query;

import org.apache.lucene.search.ScoreDoc;

import org.apache.lucene.search.TopDocs;

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

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

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

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

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

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

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

import org.junit.Test;

import com.lucene.util.File2DocumentUtils;

public class HelloWorld {

    String zhFilePath = "F:""java""workspaces""LuceneTest""luceneDatasource""世界,你好.txt";

    String filePath = "F:""java""workspaces""LuceneTest""luceneDatasource""IndexWriter addDocument's a javadoc .txt";

    String indexPath = "F:""java""workspaces""LuceneTest""luceneIndexs";

// Analyzer analyzer = new StandardAnalyzer();

    Analyzer mmAnalyzer = new MMAnalyzer(); // 词库分析,极易分词

    /**

     * 创建索引

     * 

     * @throws Exception

     * 

     */

    @Test

    public void createIndex() throws Exception {

       IndexWriter indexWriter = new IndexWriter(indexPath, mmAnalyzer, true, MaxFieldLength.LIMITED);

//     Document doc = File2DocumentUtils.file2Document(filePath);

       Document zhDoc = File2DocumentUtils.file2Document(zhFilePath);

//     indexWriter.addDocument(doc);

       indexWriter.addDocument(zhDoc);

       indexWriter.close();

    }

    /**

     * 从索引库搜索

     * 

     * @throws Exception

     */

    @Test

    public void search() throws Exception {

       // String queryString = "hello world";

       String queryString = "世界,你好";

       // 1、将搜索文件解析为Query对象

       String[] fields = { "name", "content" };

       QueryParser queryParser = new MultiFieldQueryParser(fields, mmAnalyzer);

       Query query = queryParser.parse(queryString);

       // 2、查询

       IndexSearcher indexSearcher = new IndexSearcher(indexPath);

       Filter filter = null;

       TopDocs topDocs = indexSearcher.search(query, filter, 10000);

       System.out.println("总共有【" + topDocs.totalHits + "】条结果匹配");

       // start 准备高亮器

       Formatter formatter = new SimpleHTMLFormatter("<font color=red>", "</font>");

       Scorer scorer = new QueryScorer(query);

       Highlighter highlighter = new Highlighter(formatter, scorer);

       Fragmenter fragmenter = new SimpleFragmenter(50);

       highlighter.setTextFragmenter(fragmenter);

       // end 结束高亮器

       // 3、打印输出结果

       for (ScoreDoc scoreDoc : topDocs.scoreDocs) {

           int docSn = scoreDoc.doc;

           Document doc = indexSearcher.doc(docSn);

           // start 高亮

           // 返回高亮后的结果,如果当前属性值中没有出现关键字,会返回 null

           String hc = highlighter.getBestFragment(mmAnalyzer, "content", doc.get("content"));

           if (hc == null) {

              String content = doc.get("content");

              int endIndex = Math.min(50, content.length());

              hc = content.substring(0, endIndex);

           }

           doc.getField("content").setValue(hc);

           // end 高亮

           File2DocumentUtils.printDocumentInfo(doc);

       }

    }

}

 

 该类需要有一个工具类支持,来将file转换为Document,具体实现如下:

 

package com.lucene.util;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStreamReader;

import org.apache.lucene.document.Document;

import org.apache.lucene.document.Field;

import org.apache.lucene.document.NumberTools;

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

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

publicclass File2DocumentUtils {

    publicstatic Document file2Document(String path) {

       File file = new File(path);

       Document doc = new Document();

       doc.add(new Field("name", file.getName(), Store.YES, Index.ANALYZED));

       doc.add(new Field("content", readFileContent(file), Store.YES, Index.ANALYZED));

       doc.add(new Field("size", NumberTools.longToString(file.length()), Store.YES, Index.NOT_ANALYZED));

       doc.add(new Field("path", file.getAbsolutePath(), Store.YES, Index.NOT_ANALYZED));

       return doc;

    }

    // public static void document2File(Document doc ){

    //     

    // }

    publicstatic String readFileContent(File file) {

       try {

           BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

           StringBuffer content = new StringBuffer();

           for (String line = null; (line = reader.readLine()) != null;) {

              content.append(line).append(""n");

           }

           return content.toString();

       } catch (Exception e) {

           thrownew RuntimeException(e);

       }

    }

    

    publicstaticvoid printDocumentInfo(Document doc) {

       // Field f = doc.getField("name");

       // f.stringValue();

       System.out.println("------------------------------");

       System.out.println("name     = " + doc.get("name"));

       System.out.println("content = " + doc.get("content"));

       System.out.println("size     = " + NumberTools.stringToLong(doc.get("size")));

       System.out.println("path     = " + doc.get("path"));

    }

}

 

6、到此我们结束,看下成果,英文版的我就不写了,想对来说比较容易,来看下中文版的结果

 

 

 

 

 

 

 

  • 大小: 33.1 KB
  • 大小: 19.4 KB
分享到:
评论

相关推荐

    Lucene之Helloworld

    《Lucene之HelloWorld》 在信息技术领域,搜索引擎是一个不可或缺的部分,而Apache Lucene作为一款高性能、全文本搜索库,为开发者提供了强大的文本检索能力。本文将深入探讨如何使用Lucene进行基本操作,通过...

    lunece入门之HelloWorld

    《Lucene入门之HelloWorld》 Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发并维护。它提供了一个简单但功能强大的API,用于在各种应用中实现文本的索引和搜索。这篇博文将带你走进Lucene的世界,通过...

    Lucene常用的Demo

    本篇文章将深入探讨Lucene的几个常见示例,包括`LuceneDemo`、`LuceneZJ`、`Lucene_HelloWorld`,帮助初学者快速理解Lucene的基本操作。 1. **Lucene_HelloWorld** 这个示例是入门Lucene的首选,它展示了如何创建...

    lucene:lucene构建索引,从HelloWorld到项目具体使用

    lucene构建索引,从HelloWorld到项目具体使用 ====================项目一:=================================== qianjun.lucene.first ====================项目二:=================================== qianjun....

    lucence入门HelloWorld

    然后,下载最新版的Lucene库,将其解压到本地文件系统。 2. **项目配置**:创建一个新的Java项目,将Lucene的jar文件添加到项目的类路径中。在提供的`.classpath`和`.project`文件中,你可以看到项目的构建和依赖...

    Lucene-Demo.rar Lucene分词的demo

    例如,一个英文分词器可能会将句子"Hello World"拆分为"Hello"和"World"两个术语。 在导入这个Demo项目后,开发者可以查看和学习如何实例化分词器、创建索引以及执行搜索。分词器的配置是灵活的,可以根据需求选择...

    Annotated Lucene 中文版 Lucene源码剖析

    - **Hello World!** - 创建一个简单的索引,并进行基本的查询操作,这是入门Lucene的第一步。 - **Lucene Roadmap**: - 了解Lucene的发展历程及其未来规划对于开发者来说非常重要。 #### 索引文件结构 - **...

    使用Lucene.net进行全文搜索

    例如,英文Analyzer可能会将“hello world”拆分为“hello”和“world”。 - **创建Document**: 模拟数据库中的记录,Document包含字段(Field),如标题、正文等,每个字段可以指定是否被索引和存储。 - **添加...

    elk入门教程,程序员的helloworld

    Elasticsearch(简称ES)是一款强大的开源搜索引擎,它基于Apache Lucene构建,提供了一种分布式、实时、高可用的文件存储和搜索能力。其核心特性包括: 1. **分布式实时文件存储**:Elasticsearch能够分布式地存储...

    全文搜索Lucene&ElasticSearch-新版.doc

    入门Lucene时,可以创建一个简单的HelloWorld程序,使用Lucene提供的API如IndexWriter进行索引的创建和维护,以及IndexSearcher进行索引的搜索。在Java环境中,需要引入相关的Lucene库,如lucene-analyzers-common、...

    lucene(HelloWord)

    《Lucene:初识搜索引擎库的“Hello World”》 Lucene,作为Apache软件基金会的顶级项目,是一款高性能、全文本检索引擎库,被广泛应用于各类搜索引擎和信息检索系统中。它提供了完整的搜索功能,包括索引、查询、...

    lucene-入门

    要使用 Lucene 进行一个简单的搜索应用(Hello World),首先需要创建一个索引库,并将一些文档索引到这个库中。然后,可以通过构建查询来搜索这个索引库中的内容。具体的步骤如下: 1. **创建一个 IndexWriter ...

    lucene项目代码

    项目描述中的“Helloworld”通常代表入门级别的示例,可能包含以下步骤: 1. **创建索引**:首先,你需要创建一个索引,将数据(例如,文件内容)转换为Lucene可以理解和查询的格式。这涉及到读取文件,创建文档...

    Lucene演示

    这个"Lucene演示"可能是为了帮助初学者理解和使用Lucene进行基本操作的一个实例,例如"HelloWorld"式的简单演示。 在开始深入Lucene之前,我们先理解一下全文搜索引擎的基本概念。全文搜索引擎不同于传统的数据库...

    lucene学习,lucene对txt,pdf,html格式的学习

    在给定的代码中,`Index`方法创建了一个包含100条记录的索引,每条记录的`name`字段从`name1`到`name100`,`value`字段都为`"Hello, World!"`。然后,`Search`方法使用`QueryParser`解析查询`name*`,并打印出所有...

    lucene相关文档

    - **查询词**:单个词或词组,词组用双引号包围,如 "hello world"。 - **查询域**:指定查询的字段,如 `title:"Do it right"`。 - **通配符查询**:使用 `?` 表示一个任意字符,`*` 表示多个任意字符,但它们不...

    Struts Web设计与开发大全

    17章:Hello World类和Ant脚本及基本Web应用结构和Ant脚; 18章:Hello World类和测试类以及Struts测试工程; 19章:Struts与Hibernate结合应用; 20章:lucene1全文检索应用,直接复制到tomcat的webapps目录下...

    ES搜索快速入门

    CreateIndexResponse response = client.admin().indices().create(Requests.createIndexRequest("helloworld")).actionGet(); System.out.println("索引创建结果:" + response.isAcknowledged()); } catch ...

    lucense demo

    要搭建一个Lucene 4.0的HelloWorld Demo,我们需要以下步骤: 1. 引入库:首先,在项目中引入Lucene和IK分词器的依赖。这通常通过Maven或Gradle来完成,添加相应的依赖配置。 2. 创建索引:这是Lucene的第一步,...

    Java_凯文·坦斯例子的放大版.zip

    学习Java时,通常会从简单的"Hello, World!"程序开始,逐步过渡到更复杂的数据结构、控制流、异常处理和文件I/O。 接下来,进入Apache Lucene的世界。Lucene提供了索引和搜索文档的基本工具,包括分词器(tokenizer...

Global site tag (gtag.js) - Google Analytics