- 浏览: 116897 次
- 来自: ...
最新评论
-
calljunny:
多谢多谢!弄了两天,找了两天了,总算在楼主这里找到真正的问题了 ...
有关SSL的问题 -
xiaolv:
String indexDir = "d:\\Tem ...
Lucene使用指南 -
linchixiong:
学习了,最近做一个练习时发现了会响应两次,现在终于知道为什么了 ...
ListSelectionListener,鼠标选中,键盘选中 -
t8500071:
神贴啊~~刚好遇到用bat执行代码时连接sqlserver出现 ...
有关SSL的问题 -
fangfan:
Jony HWong你好,我正在试验这段程序,这段程序有一个地 ...
java实现Windows资源管理器(JExplorer)
Lucene使用指南
Lucene简介
Lucene是一个基于Java的、高性能的全文检索工具包,它目前是著名的 Apache Jakarta 家族中的一个开源项目,也是目前最为流行的基于 Java 开源全文检索工具包。但它不是一个完整的搜索应用程序,而是为应用程序提供索引和搜索功能。
Lucene 是为文本类型的数据建立索引的,所以只要能把需要索引的数据格式转化的文本的,Lucene 就能对文档进行索引和搜索。比如HTML、PDF,都可以转换文本再交给Lucene进行索引。
1. Lucene环境
1.1 Lucene版本
当前版本:取当前最新版本Lucene Core 3.4.0
下载地址:http://lucene.apache.org/java/docs/index.html
linux版本: lucene-3.4.0.tgz
windows版本:lucene-3.4.0.zip
1.2 IKAnalyzer中文分词器
Lucene的分词器以接口Analyzer的形式对外提供,外部根据业务需要实现该分词器。Lucene本身提供了标准分词器StandarAnalyzer,针对英文的分词。
中文分词器现在比较成熟的是开源项目的IKAnalyzer,是针对中文的分词, 目前最新版本是IKAnalyzer3.2.8.jar
下载地址: http://code.google.com/p/ik-analyzer/downloads/list
2. Lucene和应用程序的关系
3. Lucene API使用
3.1 建立索引
为了对文档进行索引,Lucene 提供了五个基础的类,他们分别是 Document, Field, IndexWriter, Analyzer, Directory。下面我们分别介绍一下这五个类的用途:
Document
Document 是用来描述文档的,这里的文档可以指一个 HTML 页面,一封电子邮件,或者是一个文本文件。一个 Document对象由多个 Field 对象组成的。可以把一个 Document 对象想象成数据库中的一个记录,而每个 Field 对象就是记录的一个字段。
Field
Field 对象是用来描述一个文档的某个属性的,比如一封电子邮件的标题和内容可以用两个 Field 对象分别描述。
Analyzer
在一个文档被索引之前,首先需要对文档内容进行分词处理,这部分工作就是由 Analyzer 来做的。Analyzer 类是一个抽象类,它有多个实现。针对不同的语言和应用需要选择适合的 Analyzer。Analyzer 把分词后的内容交给 IndexWriter 来建立索引。
IndexWriter
IndexWriter 是 Lucene 用来创建索引的一个核心的类,他的作用是把一个个的 Document 对象加到索引中来。
Directory
这个类代表了 Lucene 的索引的存储的位置,这是一个抽象类,它目前有两个实现,第一个是 FSDirectory,它表示一个存储在文件系统中的索引的位置。第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。
使用例子
public void createIndexs() throws Exception { String indexDir = "d:\\Temp\\lucence\\indexDir"; String dataDir = "d:\\Temp\\lucence\\dataDir"; Analyzer analyzer = new IKAnalyzer(true); // 使用中文分词器 File dir = new File(dataDir); File[] files = dir.listFiles();
Directory fsDirectory = FSDirectory.open(new File(indexDir)); IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_34, analyzer); config.setOpenMode(OpenMode.CREATE_OR_APPEND); config.setMaxBufferedDocs(1000); IndexWriter indexWriter = new IndexWriter(fsDirectory, config);
for(int i = 0; i < files.length; i++) { String filePath = files[i].getAbsolutePath();
if(filePath.endsWith(".html") || filePath.endsWith(".htm")) { HTMLDocParser htmlParser = new HTMLDocParser(filePath); String path = htmlParser.getPath(); String title = htmlParser.getTitle(); Reader content = htmlParser.getContent();
Document document = new Document(); document.add(new Field("path", path, Field.Store.YES, Field.Index.NO, Field.TermVector.NO)); document.add(new Field("title", title, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS)); document.add(new Field("content", content, Field.TermVector.WITH_POSITIONS_OFFSETS));
indexWriter.addDocument(document); } } indexWriter.commit(); indexWriter.optimize(); indexWriter.close(); } |
3.2 搜索文档
在上面一部分中,我们已经为一个目录下的文本文档建立好了索引,现在在这个索引上进行搜索以找到包含某个关键词或短语的文档。Lucene 提供了几个基础的类来完成这个过程,它们分别是呢 IndexSearcher, Query, QueryParser,TopDocs. 下面我们分别介绍这几个类的功能。
Query
这是一个抽象类,Lucene针对不同的类型提供了不同的实现,比如 TermQuery, BooleanQuery, PrefixQuery,PhraseQuery
等
. 这个类的目的是把用户输入的查询字符串封装成 Lucene 能够识别的 Query。
QueryParser
如果不乐意去了解诸如BooleanQuery,PhraseQuery等看上去复杂的查询类型。希望的是输入一个字符串,它就能够理解用户的搜索意图,然后转换成lucene中合理的Query子类,提供给lucene进行搜索,那这个就是QueryParser。QueryParser能够根据用户的输入来进行解析,自动构建合适的Query对象。
IndexSearcher
IndexSearcher 是用来在建立好的索引上进行搜索的。它只能以只读的方式打开一个索引,所以可以有多个 IndexSearcher的实例在一个索引上进行操作。
TopDocs
TopDocs是用来保存搜索的结果。保存前N条得分高的记录。
使用例子
public List search(String strQuery) throws Exception { List searchResult = new ArrayList(); String indexDir = "d:\\Temp\\lucence\\indexDir"; String field = "content"; Analyzer analyzer = new IKAnalyzer(true); // 使用中文分词器
Directory fsDirectory = FSDirectory.open(new File(indexDir)); IndexSearcher indexSearcher = new IndexSearcher(fsDirectory, true);
QueryParser queryParser = new QueryParser(Version.LUCENE_34, field, analyzer); Query query = queryParser.parse(strQuery);
if (null != query && null != indexSearcher) { TopDocs hits = indexSearcher.search(query, 1000); int totalHits = hits.totalHits; int len = Math.min(1000, totalHits);
ScoreDoc[] docs = hits.scoreDocs; for (int i = 0; i < len; i++) { SearchResultBean resultBean = new SearchResultBean();
Document doc = indexSearcher.doc(docs[i].doc); resultBean.setHtmlPath(doc.get("path")); resultBean.setHtmlTitle(doc.get("title")); searchResult.add(resultBean); } } return searchResult; } |
4. 附录
提供一个简单的Lucene Demo工程。参考lucene-demo.rar。
- lucene-demo.rar (2.5 MB)
- 下载次数: 172
评论
String dataDir = "d:\\Temp\\lucence\\dataDir";
这两个地址干什么用?
地址下面还要自己建*.html的文件?
发表评论
-
【jira3.6破解版】界面中文乱码问题解决办法
2012-03-23 17:30 3139原因: jira3.6版本默认的界面字符编码为big5。 ... -
Extjs实现快捷键CTRL+TAB对Tabpanel进行Tab切换
2012-03-16 17:24 4045// 注册ctrl+tab组合键到keymap ... -
memcache及其telnet命令使用详解
2011-09-19 11:34 299231、启动Memcache 常用参数memcached 1. ... -
java序列化的一点经验
2011-08-12 22:07 4298java序列化的一点经验 半年多一来,一直碰到一个问题没有解决 ... -
Jad.exe反编译工具和jad eclipse插件
2011-01-26 16:19 3640配置jad插件 直接将net.sf.jadclipse_3 ... -
smartcare各类文档
2010-09-18 21:41 0smartcare各类文档 -
Sock Demo
2010-08-23 00:40 0Sock Demo -
实时监控方案分析
2010-08-10 02:05 0实时监控方案分析 -
数据库连接池-C3P0配置
2010-08-03 00:43 4242>>转自:http://hi.baidu.com/ ... -
Linux自动化分区
2010-07-31 22:35 0#!/bin/bash disk='/dev/hdc' e ... -
JVM调优
2010-07-19 01:06 1156JVM调优 -
LVS集群
2010-07-16 00:57 1020LVS集群 -
Application Layer Gateway Service 和 FTP
2010-05-17 22:41 1826Application Layer Gateway Servi ... -
FTP - RFC959 中文版
2010-05-14 00:02 4536转自:http://www.chinaitpower.com/ ... -
网络地址转换NAT
2010-05-13 23:57 2524网络地址转换(NAT,Network Address Tran ... -
Firewall rules for FTP+SSL Explicit
2010-05-10 01:14 1341Firewall rules for FTP+SSL Expl ... -
ftp与防火墙
2010-05-10 00:54 2632下面是针对ftp与防火墙的: 原文在 https://bbs ... -
区分网上邻居
2010-03-11 01:12 946ShellFolder.get("fileChoos ... -
论FTP的主动被动和相关的防火墙设置
2009-09-08 00:32 3074FTP 分为两类: 主动FTP( ... -
SSL Handshake :Bad Record Mac
2009-07-23 00:06 7617case 1: SSL3_GET_RECORD:decryp ...
相关推荐
《Lucene开发指南》是一份综合性的学习资料,旨在帮助开发者深入理解和熟练运用Apache Lucene这一强大的全文搜索引擎库。Lucene是Java语言实现的开源项目,广泛应用于信息检索、数据分析和大数据处理等领域。本指南...
《Lucene in Action》第二版是一本专注于Apache Lucene搜索引擎库的专业著作,更新至2010年7月,提供详尽且清晰的Lucene使用指南。这本书是开发者们深入理解并有效应用Lucene进行信息检索和全文搜索的宝贵资源。 ...
《Lucene IN ACTION》中文版是一本深入探讨Apache Lucene搜索引擎库的专业书籍,它为读者提供了全面、详尽的Lucene使用指南和技术解析。Lucene是Java开发的全文检索库,广泛应用于各种信息检索和文本分析场景。这...
这个名为“lucene帮助文档.chm”的压缩包文件,包含了一份详尽的Lucene使用指南,通常以CHM(Microsoft Compiled HTML Help)格式呈现。CHM文件是一种将HTML页面、图像和其他资源组合成一个单一的、可搜索的离线帮助...
《Lucene基础指南》 Lucene是一个由Apache软件基金会开发的全文搜索引擎库,采用Java语言编写,具有强大的功能。它的核心API简洁而高效,主要处理两大任务:建立索引和执行搜索。 1. 建立索引 - Document:在...
《Lucene2.9开发指南》是一份专为初级开发者准备的资料,旨在详细介绍如何使用开源全文搜索工具包Lucene2.9.1。Lucene作为一个强大的文本搜索库,其核心功能包括建立索引和执行搜索。以下是关于Lucene2.9开发的一些...
**Lucene 入门指南** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它是 Java 开发人员用来构建搜索引擎应用程序的基础工具。本指南将帮助初学者理解 Lucene 的核心概念,以及如何利用它来...
**Lucene 指南** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发,广泛应用于各种搜索引擎的构建。它提供了一个简单但功能强大的API,允许开发者在自己的应用中实现全文检索功能。Lucene 入门需要...
### Lucene入门指南 #### 一、Lucene简介 **Lucene** 是一款高性能的全文检索引擎工具包,由 **Apache 软件基金会** 的 **Jakarta 项目组** 开发并维护。作为一款完全开放源代码的工具,Lucene 提供了一系列的功能...
《Lucene in Action》是关于Apache Lucene的权威指南,这本书深入浅出地介绍了全文搜索引擎的构建和优化。源码的提供使得读者可以更直观地理解Lucene的工作原理,这对于学习和开发基于Lucene的搜索应用非常有帮助。...
《Lucene in Action》是关于Apache Lucene的权威指南,这本书深入浅出地介绍了全文搜索引擎的构建和优化。Lucene是一个高性能、全文本搜索库,它允许开发人员在应用程序中轻松实现复杂的搜索功能。这本书主要面向...
这是一本广泛认可的关于Apache Lucene的权威指南,通常被简称为LIA,它深入介绍了Lucene搜索引擎库的使用和实现。 描述中的"Lucene资料大全"暗示了这个压缩包可能包含了除书籍之外的其他学习材料,比如教程、PPT或...
**Lucene学习指南** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单的API,使得开发者能够方便地在应用中实现全文检索功能。本篇文章将...
【Lucene3.0 使用教程】是针对Java开发者的一个指南,旨在教授如何利用Apache Lucene 3.0.1版本实现全文检索功能。Lucene是一个高性能、可伸缩的开源全文检索库,它提供了文本分析、索引创建、文档检索等核心功能。...
Lucene实战(第2版)(最权威的Lucene指南,覆盖Apache Lucene 3.0,作者为Lucene项目成员) 《Lucene实战(第2版)》基于Apache的Lucene 3.0,从Lucene核心、Lucene应用、案例分析3个方面详细系统地介绍了Lucene,包括...
至于压缩包中的文件"用户管理手册.docx",这可能是一个关于如何使用Lucene的详细指南,涵盖了从安装、配置到实际应用的方方面面。"DocSearch"可能是一个示例程序或库,展示了如何在Java项目中实际集成和使用Lucene...
本指南将深入探讨基于Lucene 3.6的搜索工具包及其使用方法。 一、Lucene 3.6核心组件 1. 分析器(Analyzer):负责对输入文本进行预处理,包括分词、去除停用词、词形还原等。Lucene 3.6中内置了多种分析器,如...
《Lucene 数据库:深入解析与实践指南》 Lucene,作为一款开源的全文检索库,是Java领域中广泛使用的搜索引擎框架。它为开发者提供了强大的文本检索功能,使得在大量数据中快速查找相关信息变得轻而易举。在这个...