- 浏览: 484607 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
Source_野驴:
...
jsp静态化和伪静态化 -
zidanzzg:
很好的知识,找到了利用异或交换数值的理论支持,谢谢分享
XOR的性质和运算 -
ueseu:
引用(2) DomainDomain域名也是Cookie的一部 ...
Cookie的组成 -
ueseu:
引用Secure取true或者false值。如果为true,那 ...
Cookie的组成 -
liqi___123:
理解得很透彻,谢谢!!
ROLAP、MOLAP和HOLAP联机分析处理区别
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类,类里有两个方法createIndex和search分别是创建索引库和搜索,搜索出来的结果高亮显示,具体实现为:
该类需要有一个工具类支持,来将file转换为Document,具体实现如下: 6、到此我们结束,看下成果,英文版的我就不写了,想对来说比较容易,来看下中文版的结果
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);
}
}
}
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"));
}
}
发表评论
-
消息中间件和JMS
2013-06-03 10:21 812当前,CORBA、DCOM、RMI等 ... -
失血模型-贫血模型-充血模型-胀血模型
2012-07-20 13:21 2089一、失血模型 失血模型简单来说,就是domain ob ... -
JSP中文验证码
2012-05-14 17:18 1243以上两篇文章的内容介绍了有关JSP中产生数字验证码跟中文验证 ... -
Javamail中的常见中文乱码问题与解决办法
2011-09-09 09:48 1643在使用javamail api开发邮件服务系统时,我们常常会碰 ... -
ZK框架简介
2011-07-21 08:08 13671、ZK框架简介 ZK框架是 ... -
Tiles使用简介
2011-06-23 14:32 1257最新喜欢看一看一些比较“老旧”的技术,感觉这些 ... -
Apache Commons DbUtils快速上手
2011-06-18 10:58 1368最近喜欢看一些技术比较“老旧”的东西,虽然所实现的技术老 ... -
Xdoclet用于servlet
2011-03-24 11:26 855web.xm和taglib 作servlet映射是个讨厌的工 ... -
JSF生命周期监听
2011-03-11 18:10 1264这里有一点代码, 一个 PhaseListener ... -
自定义jsp标记库简介
2011-03-11 18:08 8121. 基本步骤 实例-输出“hello,eking” 1) ... -
oschina非常重要的类—RequestContext
2011-03-10 11:22 1424RequestContext 这个类在 OSChina 中是非 ... -
组合Servlet+Freemarker的两种方法
2011-03-06 12:52 1504Servlet的轻巧高效,Freemarker的强大简便 ... -
Apache开源项目分类列表
2011-01-12 15:45 1065分类 项目名 说明 开发 ... -
myeclipse快捷键
2010-11-26 09:45 770MyEclipse 快捷键[转载] ... -
MyEclipse Content Assist
2010-11-26 09:39 1046问题描述: 在使用MyEclipse 6中不能使用 al ... -
删除eclipse的configuration目录
2010-07-07 10:27 3135eclipse 3.4以前的版本,如果出现什么问题了, ... -
JasperReports和iReport制作报表
2010-06-25 13:40 1364最近使用了JasperReports ... -
用p6spy查看HIBERNATE生成的SQL
2010-06-02 15:52 2182P6Spy是一个可以用来在应用程序中拦截和修改数据操作 ... -
hibernate id Generator详解
2010-06-02 15:16 1334Hibernate中,<id>标签 ...
相关推荐
《Lucene之HelloWorld》 在信息技术领域,搜索引擎是一个不可或缺的部分,而Apache Lucene作为一款高性能、全文本搜索库,为开发者提供了强大的文本检索能力。本文将深入探讨如何使用Lucene进行基本操作,通过...
《Lucene入门之HelloWorld》 Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发并维护。它提供了一个简单但功能强大的API,用于在各种应用中实现文本的索引和搜索。这篇博文将带你走进Lucene的世界,通过...
本篇文章将深入探讨Lucene的几个常见示例,包括`LuceneDemo`、`LuceneZJ`、`Lucene_HelloWorld`,帮助初学者快速理解Lucene的基本操作。 1. **Lucene_HelloWorld** 这个示例是入门Lucene的首选,它展示了如何创建...
lucene构建索引,从HelloWorld到项目具体使用 ====================项目一:=================================== qianjun.lucene.first ====================项目二:=================================== qianjun....
然后,下载最新版的Lucene库,将其解压到本地文件系统。 2. **项目配置**:创建一个新的Java项目,将Lucene的jar文件添加到项目的类路径中。在提供的`.classpath`和`.project`文件中,你可以看到项目的构建和依赖...
例如,一个英文分词器可能会将句子"Hello World"拆分为"Hello"和"World"两个术语。 在导入这个Demo项目后,开发者可以查看和学习如何实例化分词器、创建索引以及执行搜索。分词器的配置是灵活的,可以根据需求选择...
- **Hello World!** - 创建一个简单的索引,并进行基本的查询操作,这是入门Lucene的第一步。 - **Lucene Roadmap**: - 了解Lucene的发展历程及其未来规划对于开发者来说非常重要。 #### 索引文件结构 - **...
例如,英文Analyzer可能会将“hello world”拆分为“hello”和“world”。 - **创建Document**: 模拟数据库中的记录,Document包含字段(Field),如标题、正文等,每个字段可以指定是否被索引和存储。 - **添加...
Elasticsearch(简称ES)是一款强大的开源搜索引擎,它基于Apache Lucene构建,提供了一种分布式、实时、高可用的文件存储和搜索能力。其核心特性包括: 1. **分布式实时文件存储**:Elasticsearch能够分布式地存储...
入门Lucene时,可以创建一个简单的HelloWorld程序,使用Lucene提供的API如IndexWriter进行索引的创建和维护,以及IndexSearcher进行索引的搜索。在Java环境中,需要引入相关的Lucene库,如lucene-analyzers-common、...
《Lucene:初识搜索引擎库的“Hello World”》 Lucene,作为Apache软件基金会的顶级项目,是一款高性能、全文本检索引擎库,被广泛应用于各类搜索引擎和信息检索系统中。它提供了完整的搜索功能,包括索引、查询、...
要使用 Lucene 进行一个简单的搜索应用(Hello World),首先需要创建一个索引库,并将一些文档索引到这个库中。然后,可以通过构建查询来搜索这个索引库中的内容。具体的步骤如下: 1. **创建一个 IndexWriter ...
项目描述中的“Helloworld”通常代表入门级别的示例,可能包含以下步骤: 1. **创建索引**:首先,你需要创建一个索引,将数据(例如,文件内容)转换为Lucene可以理解和查询的格式。这涉及到读取文件,创建文档...
这个"Lucene演示"可能是为了帮助初学者理解和使用Lucene进行基本操作的一个实例,例如"HelloWorld"式的简单演示。 在开始深入Lucene之前,我们先理解一下全文搜索引擎的基本概念。全文搜索引擎不同于传统的数据库...
在给定的代码中,`Index`方法创建了一个包含100条记录的索引,每条记录的`name`字段从`name1`到`name100`,`value`字段都为`"Hello, World!"`。然后,`Search`方法使用`QueryParser`解析查询`name*`,并打印出所有...
- **查询词**:单个词或词组,词组用双引号包围,如 "hello world"。 - **查询域**:指定查询的字段,如 `title:"Do it right"`。 - **通配符查询**:使用 `?` 表示一个任意字符,`*` 表示多个任意字符,但它们不...
17章:Hello World类和Ant脚本及基本Web应用结构和Ant脚; 18章:Hello World类和测试类以及Struts测试工程; 19章:Struts与Hibernate结合应用; 20章:lucene1全文检索应用,直接复制到tomcat的webapps目录下...
CreateIndexResponse response = client.admin().indices().create(Requests.createIndexRequest("helloworld")).actionGet(); System.out.println("索引创建结果:" + response.isAcknowledged()); } catch ...
要搭建一个Lucene 4.0的HelloWorld Demo,我们需要以下步骤: 1. 引入库:首先,在项目中引入Lucene和IK分词器的依赖。这通常通过Maven或Gradle来完成,添加相应的依赖配置。 2. 创建索引:这是Lucene的第一步,...
学习Java时,通常会从简单的"Hello, World!"程序开始,逐步过渡到更复杂的数据结构、控制流、异常处理和文件I/O。 接下来,进入Apache Lucene的世界。Lucene提供了索引和搜索文档的基本工具,包括分词器(tokenizer...