- 浏览: 557511 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (478)
- lucene (45)
- oracle (19)
- nutch (2)
- blog (2)
- 垂直搜索 (19)
- java综合 (89)
- spring (15)
- Hibernate (9)
- Struts (9)
- Hadoop (16)
- Mysql (12)
- nosql (10)
- Linux (3)
- MyEclipse (4)
- Ant (1)
- 设计模式 (19)
- JBPM (1)
- JSP (1)
- HtmlParser (5)
- SVN (2)
- 插件 (2)
- 收藏 (7)
- Others (1)
- Heritrix (18)
- Solr (4)
- 主题爬虫 (31)
- 内存数据库 (24)
- 分布式与海量数据 (32)
- httpclient (14)
- Tomcat (1)
- 面试宝典 (6)
- Python (14)
- 数据挖掘 (1)
- 算法 (6)
- 其他 (4)
- JVM (12)
- Redis (18)
最新评论
-
hanjiyun:
本人水平还有待提高,进步空间很大,看这些文章给我有很大的指导作 ...
JVM的内存管理 Ⅲ -
liuxinglanyue:
四年后的自己:这种方法 不靠谱。 使用javaagent的方式 ...
计算Java对象占用内存空间的大小(对于32位虚拟机而言) -
jaysoncn:
附件在哪里啊test.NoCertificationHttps ...
使用HttpClient过程中常见的一些问题 -
231fuchenxi:
你好,有redis,memlink,mysql的测试代码吗?可 ...
MemLink 性能测试 -
guyue1015:
[color=orange][/color][size=lar ...
JAVA同步机制
上一篇中我们已经建好了索引,下面该使用索引来做正事了。
这是一段实施基本搜索功能的代码示例:
1、打开已有的索引,创建IndexSearcher对象
2、指定查询用到的Field和查询字符串,创建TermQuery
3、使用IndexSearcher进行查询,查询结果以TopDocs对象返回。在这里search方法的第二个参数指定返回前N个记录。
主要对象说明:
1、Term
Term是查询使用的基本单位,对应与在索引中使用的Field类。可以将其理解为一个map,其中key为索引中Field name,value为查询字符串。
当查询字符串为一个单词的情况下,不会有任何问题;但是当需要查询查询字符串为多个单词或是一句话的时候就会查不出来。这个主要原因是,在建立索引时我们对Field中的内容进行了分词,但在查询时,对查询字符串没有做分词,整个做为一个单词处理,当然查不到了。
要解决这个问题,针对上面的例子,只需要去掉new TermQuery这句,换成下面的代码:
//处理输入的查询字符串
这里需要保证使用的analyzer与建立索引时用的一样即可。new QueryParser的第二个参数就是查询字符串。
我们用query.toString()可以看到转化后的Term内容。
•当查询字符串="java"时,query.toString()=contents:java (前面为field name,后面为查询内容)
•当查询字符串="java and system"时,query.toString()=contents:java contents:system。可见已经被做了分词,同时去掉了连接字and
2、TopDocs
此类封装了返回的符合条件的记录,其中:
•totalHits为符合条件的记录总数;
•scoreDocs为符合条件记录的数组,不过里面只记录了Document的ID。Document的实际内容,需通过IndexSearcher取docID对应的Document才能得到。
需要注意-若设置在search方法中设置了返回记录数为N,则scoreDocs最多只会包含前N个文档;但是totalHits会返回匹配的总数量(类似google中显示的匹配的总页面数量)。scoreDocs.length可能不等于totalHits,做scoreDocs遍历时,直接用totalHits做为数组大小用的,容易引起bug!
另外取符合条件Document实际内容的代码如下:
//显示查询结果,字段包括:路径、修改时间
DEMO:
发表评论
-
关于Lucene的讨论
2011-01-01 10:20 1052分类为[lucene]的文章 ... -
有关Lucene的问题(收藏)推荐
2010-12-30 21:02 1093有关Lucene的问题(1):为 ... -
Lucene 学习总结(收藏)推荐
2010-12-30 20:54 1544Lucene学习总结之一:全文检索的基本原理 ... -
基于Lucene的Compass 资源(收藏)
2010-12-29 18:29 11271.2、Compass相关网上资源 1、官方网站1: http ... -
Lucene 3.0.2索引文件官方文档(二)
2010-12-28 22:36 996Deletable File A writer dy ... -
Lucene 3.0.2索引文件官方文档(一)
2010-12-28 22:34 1446Apache Lucene - Index File ... -
Lucene 3.0 索引文件学习总结(收藏)
2010-12-28 22:28 927lucene学习1——词域信息 ... -
Lucene 字符编码问题
2010-12-27 20:29 982现在如果一个txt文件中包含了ANSI编码的文本文件和Uni ... -
Lucene 字符编码问题
2010-12-27 20:20 1018现在如果一个txt文件中包含了ANSI编码的文本文件和Unic ... -
Annotated Lucene(源码剖析中文版)
2010-12-25 22:52 1245Apache Lucene是一个高性能(high-pe ... -
Lucene 学习推荐博客
2010-12-25 22:42 1026深未来deepfuturelx http://deepfut ... -
Lucene3.0 初窥 总结(收藏)
2010-12-25 22:16 1793【Lucene3.0 初窥】全文检索的基本原理 ... -
转:基于lucene实现自己的推荐引擎
2010-12-17 17:05 1046采用基于数据挖掘的 ... -
加速 lucene 的搜索速度 ImproveSearchingSpeed(二)
2010-12-17 17:01 1025本文 为简单翻译,原文在:http://wiki.apac ... -
加速 lucene 索引建立速度 ImproveIndexingSpeed
2010-12-17 16:58 1058本文 只是简单的翻译,原文 在 http://wiki.a ... -
lucene 3.0 中的demo项目部署
2010-12-15 22:02 964转自:bjqincy 1 在myEclipise 建立 ... -
Lucene 3.0.2 源码 - final class Document
2010-12-14 22:33 874package org.apache.lucene.do ... -
Lucene 3.0.2 源码 - final class Field
2010-12-14 22:29 938package org.apache.lucene.do ... -
Lucene 3.0.2 源码 - abstract class AbstractField
2010-12-14 22:28 1030package org.apache.lucene.do ... -
Lucene 3.0.2 源码 - interface Fieldable
2010-12-14 22:28 1160package org.apache.lucene.do ...
相关推荐
然后,开发者需要在Lucene的索引创建和查询过程中,替换默认的Analyzer为PaodingAnalyzer,以便利用其中文分词能力。 集成步骤大致如下: 1. 引入Paoding-Analysis和Spring兼容的jar包到项目类路径。 2. 在配置文件...
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
【Lucene3.0查询类型详解】 在Lucene3.0中,查询处理是一个关键环节,涉及多种查询方式和理论模型。以下是对这些概念的详细解释: 1. **查询方式**: - **顺序查询**:是最简单的查询方式,直接遍历索引,效率较...
《Lucene 3.0 学习笔记(三)与Paoding整合》 在深入了解Lucene 3.0的过程中,我们经常会遇到如何将其与第三方工具进行整合的问题,以提升搜索性能和用户体验。这篇学习笔记主要关注的是将Lucene 3.0与Paoding搜索...
2. 搜索索引:当用户提交查询时,查询解析器会生成查询对象,然后使用IndexSearcher进行搜索,找到匹配的文档。 3. 结果处理:最后,返回搜索结果,通常包括文档ID、分数及相关信息,可以进一步按需展示给用户。 ...
2. **Java版本要求的提升**:3.0放弃了对Java 1.4的支持,转而全面支持Java 1.5及以上版本,以及ant 1.7.0,进一步推动了Lucene对现代开发环境的适应性。 3. **核心代码的变化**:如`IOUtils`中的`isLocked()`方法...
lucene 3.0 API中文帮助,学习的人懂得的
本篇文章将详细介绍如何使用Lucene3.0来创建索引,并通过一个具体的例子来演示整个过程。 #### 一、Lucene3.0简介 Lucene是一款高性能、全功能的全文搜索引擎库。它为开发者提供了构建搜索应用所需的所有基本工具...
lucene3.0-highlighter.jar lucene3.0的高亮jar包,从lucene3.0源码中导出来的
赠送jar包:lucene-analyzers-smartcn-7.7.0.jar; 赠送原API文档:lucene-analyzers-smartcn-7.7.0-javadoc.jar; 赠送源代码:lucene-analyzers-smartcn-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-...
通过对《Lucene 3.0 原理与代码分析完整版》的学习,开发者不仅可以理解Lucene的工作原理,还能掌握如何定制化Lucene以满足特定需求,从而在实际项目中充分利用其强大功能。这本书是深入研究和应用Lucene不可或缺的...
8. **多线程支持**:Lucene 3.0 允许在多线程环境中使用,开发者可以利用并发特性来提高索引和搜索的速度,但需要注意同步问题,避免数据竞争。 9. **扩展性**:Lucene 3.0 提供了丰富的API,允许开发者自定义分词...
doc.add(new Field("title", "Lucene 3.0使用介绍", Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("content", "这是一个关于Lucene 3.0的实例教程。", Field.Store.YES, Field.Index.ANALYZED)); ...
赠送jar包:lucene-analyzers-common-6.6.0.jar; 赠送原API文档:lucene-analyzers-common-6.6.0-javadoc.jar; 赠送源代码:lucene-analyzers-common-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-...
赠送jar包:lucene-core-7.7.0.jar; 赠送原API文档:lucene-core-7.7.0-javadoc.jar; 赠送源代码:lucene-core-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.7.0.pom; 包含翻译后的API文档:lucene...
索引是 Lucene 的关键,它将文本数据转换为倒排索引,以便快速查找匹配查询的文档。最后,搜索过程是基于查询对象进行的,用户输入查询字符串,Lucene 返回相关的文档列表。 在给定的实例中,有两个主要的类:一个...
总结,Lucene3.0是全文检索领域的一个强大工具,其索引构建、分词、查询解析、搜索算法等功能在当时具有很高的技术水平,并且具有高度的灵活性和扩展性。通过深入学习和应用Lucene3.0,开发者可以构建出高效、智能的...
3. **内存管理优化**:Lucene 3.0改进了内存使用策略,降低了内存占用,同时提升了索引和搜索的性能。 4. **查询性能提升**:通过引入更智能的缓存机制,以及对查询执行路径的优化,使得复杂查询的响应时间缩短。 ...