- 浏览: 150241 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (69)
- Maven (1)
- lucene (22)
- bobo zoie (6)
- eclipse (5)
- Nexus (1)
- Git (1)
- trac (1)
- RMI (2)
- svn (0)
- Protocol buffer (0)
- sensei (6)
- JMX (2)
- Faceted search (1)
- Linux (1)
- Cassandra (1)
- Zookeeper (3)
- zoie (1)
- jmap (1)
- mongodb (2)
- 百度百科 (2)
- 词库 (2)
- 抓取 (2)
- IndexTank (1)
- LinkedIn (4)
- norbert (3)
- 分布式 (2)
- senseidb (2)
- Thrift (1)
- scala (1)
- 搜索引擎 (1)
- 质量 (1)
- Nosql (1)
- Jaccard (1)
- Mahout (1)
最新评论
-
bluky999:
@Mark
怎样量化评价搜索引擎的结果质量 -
baso4233:
非常感谢,我跑通了。途中出现了,java.lang.Unsup ...
norbert 高并发分布式服务例子 examples (二) -
yangsong158:
rabbit9898 写道xiansuanla 写道我运行 m ...
JMX 入门例子 -
rabbit9898:
xiansuanla 写道我运行 main方法以后 cmd 里 ...
JMX 入门例子 -
xiansuanla:
我运行 main方法以后 cmd 里面运行 jconsole ...
JMX 入门例子
源:http://hxraid.iteye.com/blog/634577
首先我们用下面的代码来看看打印标准分词器的运行结果 (在2.9下也可以运行)
class StandardTest{ public static void main(String[] args) throws IOException{ //输入流 StringReader s=new StringReader(new String("I'm a student. these are apples")); //标准分词 TokenStream tokenStream = new StandardTokenizer(Version.LUCENE_CURRENT, s); //标准过滤 tokenStream=new StandardFilter(tokenStream); //大小写过滤 tokenStream=new LowerCaseFilter(tokenStream); TermAttribute termAtt=(TermAttribute)tokenStream.getAttribute(TermAttribute.class); TypeAttribute typeAtt=(TypeAttribute)tokenStream.getAttribute(TypeAttribute.class); OffsetAttribute offsetAtt=(OffsetAttribute)tokenStream.getAttribute(OffsetAttribute.class); PositionIncrementAttribute posAtt=(PositionIncrementAttribute)tokenStream.getAttribute(PositionIncrementAttribute.class); System.out.println("termAtt typeAtt offsetAtt posAtt"); while (tokenStream.incrementToken()) { System.out.println(termAtt.term()+" "+typeAtt.type()+" ("+offsetAtt.startOffset()+","+offsetAtt.endOffset()+") "+posAtt.getPositionIncrement()); } } }
打印结果:
termAtt | typeAtt | offsetAtt | posAtt |
i'm | <APOSTROPHE> | (0,3) | 1 |
a | <ALPHANUM> | (4,5) | 1 |
student | <ALPHANUM> | (6,13) | 1 |
these | <ALPHANUM> | (15,20) | 1 |
are | <ALPHANUM> | (21,34) | 1 |
apples | <ALPHANUM> | (25,31) | 1 |
在前面讲 StandardTokenizer的的时候,我们已经谈到了token的这四种属性。在这里我们再次强调一下这些Lucene的基础知识。
Lucene 3.0之后,TokenStream中的每一个token不再用next()方法返回,而是采用了incrementToken()方法(具体参见上面)。每调用一次incrementToken(),都会得到token的四种属性信息(org.apache.lucene.analysis.tokenattributes包中):
如上例:
原文本:I'm a student. these are apples
TokenSteam: [1: I'm ] [2:a] [3:student] [4:these] [5:are ] [6:apples]
(1) TermAttribute: 表示token的字符串信息。比如"I'm"
(2) TypeAttribute: 表示token的类别信息(在上面讲到)。比如 I'm 就属于<APOSTROPHE>,有撇号的类型
(3) OffsetAttribute:表示token的首字母和尾字母在原文本中的位置。比如 I'm 的位置信息就是(0,3)
(4) PositionIncrementAttribute:这个有点特殊,它表示tokenStream中的当前token与前一个token在实际的原文本中相隔的词语数量。
比如: 在tokenStream中[2:a] 的前一个token是[1: I'm ] ,它们在原文本中相隔的词语数是1,则token="a"的PositionIncrementAttribute值为1。如果token是原文本中的第一个词,则默认值为1。因此上面例子的PositionIncrementAttribute结果就全是1了。
如果我们使用停用词表来进行过滤之后的话:TokenSteam就会变成: [1: I'm ] [2:student] [3:apples]这时student的PositionIncrementAttribute值就不会再是1,而是与[1: I'm ]在原文本中相隔词语数量=2。而apples则变成了5。
那么这个属性有什么用呢,用处很大的。加入我们想搜索一个短语student apples(假如有这个短语)。很显然,用户是要搜索出student apples紧挨着出现的文档。这个时候我们找到了某一篇文档(比如上面例子的字符串)都含有student apples。但是由于apples的PositionIncrementAttribute值是5,说明肯定没有紧挨着。怎么样,用处很大吧。轻而易举的解决了短语搜索的难题哦。
其实还有两种:PayloadAttribute和FlagsAttribute。
发表评论
-
基于sensei+lucene的分布式搜索终于上线了-2012-12-08
2011-12-08 13:26 1636基于sensei+lucene的分布式搜索终于上线了 ... -
[转载] sensei分布式实时搜索系统源码解析(二) 分布式Search的流程
2011-07-22 14:57 1477看来自己很懒,发现前同事的sensei 研究了 转载: ht ... -
[转载] sensei分布式实时搜索系统源码解析(一) senseiServer的启动及若干概念
2011-07-22 14:55 1784看来自己很懒,发现前同事的sensei 研究了 转载:htt ... -
lucene分布式搜索sensei的使用及完善
2011-07-22 14:32 3550原创文章,转载请注明 ... -
转载:几种常见的基于Lucene的开源搜索解决方案对比
2011-04-06 14:38 1335一 直接使用 Lucene ( http://lucene ... -
转载: Apache Zookeeper入门1
2011-04-06 14:36 1906源: http://www.javabloger.com/ar ... -
转载:Lucene查询语法详解
2011-04-02 10:33 1108英文原文地址:http: ... -
各种字符串Hash函数比较
2011-02-12 14:54 4129Java自带的字符串hash函数: public ... -
Lucene MoreLikeThisQuery 例子 备注
2011-01-06 11:22 14541。 编码问题: MoreLikeThisQuery中的 ... -
Lucene MoreLikeThisQuery 例子
2011-01-04 13:42 2831要做一个跟文章标题相关的新闻,本来想简单做一下,就是把标 ... -
lucene基本概念
2010-12-03 15:51 1161一、lucene索引的建立 1 ... -
[转载] lucene使用与优化
2010-12-03 10:14 1059源:http://www.cnblogs.com/bysshi ... -
[转载] 几种常见的基于Lucene的开源搜索解决方案对比
2010-12-02 16:07 908源:http://blog.fulin.org/201 ... -
lucene中的Token, TokenStream, Tokenizer, Analyzer
2010-11-22 10:41 1352转载: Token: 如果一个字段被token化,这表示它经 ... -
Lucene3.0的几种分词系统
2010-11-17 17:25 12891、 StopAnalyzer StopAnalyze ... -
当前几个主要的Lucene中文分词器的比较
2010-11-17 12:35 13261. 基本介绍: paoding :Lucene中 ... -
lucene score explain 评分解释说明
2010-11-16 17:29 2264通过Searcher.explain(Query qu ... -
lucene 排序 (Sort SortField 构造函数)
2010-11-09 13:58 4119注意: 在lucene2.9中,排序的字段域必须inde ... -
lucene 2010 大会资料 Lucene Revolution 2010
2010-10-27 15:41 956lucene 2010 大会资料资料下载 http://ww ... -
bobo-browse 的分组统计(Faceted Search)
2010-10-25 16:43 2690基于lucene的bobo-browse 的分组统计(Face ...
相关推荐
在这个例子中,我们创建了一个索引,包含一个文档,然后搜索包含"Lucene 3.0"的文档。这个简单的示例展示了Lucene的基本用法,实际应用中可以根据需要扩展,例如添加更多的文档字段、实现更复杂的查询逻辑,或者使用...
这里的“lucene 3.0 例子”是针对Lucene 3.0版本的一个示例项目,旨在帮助新手快速理解和掌握Lucene的基本用法。 首先,让我们了解一下Lucene 3.0的核心概念: 1. **索引(Indexing)**:Lucene首先将文档内容转化...
通过运行这个例子,你将对 Lucene 3.0 的基本使用有更深入的理解。 总的来说,Lucene 3.0 提供了一套完整的工具集,用于构建高效、灵活的搜索功能。通过熟练掌握 Lucene API,开发者可以轻松地将全文搜索集成到各种...
lucene.net 3.0.3、结合盘古分词进行搜索的小例子(分页功能)-附件资源
7. **分布式搜索**:虽然3.0版本的Lucene不直接支持分布式搜索,但书中可能包含如何在单机环境下模拟多节点索引和查询的方法,这对于理解后来的Solr或Elasticsearch等分布式搜索系统非常有帮助。 8. **性能优化**:...
本书主要介绍了 Apache Lucene 3.0 的最新特性与应用方法,适合所有对 Lucene 技术感兴趣的学习者。 #### 二、Lucene 概述 ##### 2.1 什么是 Lucene? Apache Lucene 是一个高性能、全功能的文本搜索引擎库。它...
在全文检索部分,结合Lucene3.0介绍了搜索引擎的原理与进展。用简单的例子介绍了Lucene的最新应用方法。包括完整的搜索实现过程:从完成索引到搜索用户界面的实现。本书还进一步介绍了实现准实时搜索的方法,展示了...
最初作为开源项目Lucene的一部分,它主要服务于该搜索引擎框架,通过结合词典分词与语法分析算法实现了中文文本的高效分词。 ##### 1.1 结构设计 - **正向迭代最细粒度切分算法**:这是IKAnalyzer的核心算法之一,...
| 3.2.0G及后续版本 | 兼容Lucene2.9及3.0版本 | 仅对solr1.4提供接口实现 | 请注意参考对应的版本使用手册以确保正确使用。 ##### 2.3 安装部署 IKAnalyzer的安装包包含了《IKAnalyzer中文分词器V3.X使用手册》...