- 浏览: 82874 次
- 来自: 济南
文章分类
最新评论
-
lib:
速度很快啊!下手很早啊。
在Raspberry Pi上安装Nodejs环境 -
qalong:
如此好文,哪能不顶
Canvas入门实例08:三次方贝塞尔曲线 -
johnnycmj:
膜拜啊....
简单模拟Google的大马跑啊跑的Doodle -
BuN_Ny:
zeng1990 写道BuN_Ny 写道feizhang666 ...
17) 第二章 索引:优化索引(Optimizing) -
zeng1990:
BuN_Ny 写道feizhang666 写道现在已经是luc ...
17) 第二章 索引:优化索引(Optimizing)
针对Field我们还有最后一个特性要讨论:截断(truncation)。其实就是之前"基本索引操作"中提到的 MaxFieldLength 问题。如果只是从字面上感觉,它就是个设置Field最大长度的值。
那么它到底是设置一个文档中同名域的最大个数还是不同文档的同名域的最大个数?是设置同名域的最大Term数还是一个域的最大Term数?
答案是:一个域的最大Term数。也就是说,我们第十节(Field中含多个值的问题)中所讲的方式索引的同名Field,属于不同的Field实例,并非整个名为"author"的域的最大长度受限,而是其中的每个Field实例的最大长度受限。算了,我表达的一塌糊涂...
直接上代码:
public class IndexTruncationTest extends TestCase{ private Directory directory; public void setUp() throws Exception{ directory = new RAMDirectory(); IndexWriter writer = new IndexWriter(directory, new WhitespaceAnalyzer(), new MaxFieldLength(50)); writer.setInfoStream(System.out); //只有一个Field实例 Document doc = new Document(); String term = ""; for(int i=0; i<100; ++i){ term += " Test"+i; } doc.add(new Field("test", term, Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); writer.close(); } //前50个Term是可以搜索到的 public void testUnTruncated() throws Exception{ IndexSearcher is = new IndexSearcher(directory); Query query = new TermQuery(new Term("test","Test0")); Query query2 = new TermQuery(new Term("test","Test2")); Query query49 = new TermQuery(new Term("test","Test49")); int i0 = TestUtil.hitCount(is, query); int i2 = TestUtil.hitCount(is, query2); int i49 = TestUtil.hitCount(is, query49); assertEquals(1, i0); assertEquals(1, i2); assertEquals(1, i49); is.close(); } //后50个Term被无情的忽略了... public void testTruncated() throws Exception{ IndexSearcher is = new IndexSearcher(directory); Query query50 = new TermQuery(new Term("test","Test50")); Query query52 = new TermQuery(new Term("test","Test52")); Query query99 = new TermQuery(new Term("test","Test99")); int i0 = TestUtil.hitCount(is, query50); int i2 = TestUtil.hitCount(is, query52); int i49 = TestUtil.hitCount(is, query99); assertEquals(0, i0); assertEquals(0, i2); assertEquals(0, i49); is.close(); } }
其中,writer.setInfoStream(PrintStream infoStream); 方法可以用来查看包括maxFieldLength在内的一些信息。我把标准输出流作为参数传给了它,于是在我的控制台上输出了如下信息:
IFD [Tue Jun 14 16:45:11 CST 2011; main]: setInfoStream deletionPolicy=org.apache.lucene.index.KeepOnlyLastCommitDeletionPolicy@10e3293
IW 0 [Tue Jun 14 16:45:11 CST 2011; main]: setInfoStream: dir=org.apache.lucene.store.RAMDirectory@4a63d8 lockFactory=org.apache.lucene.store.SingleInstanceLockFactory@1e0ff2f mergePolicy=org.apache.lucene.index.LogByteSizeMergePolicy@1d6776d mergeScheduler=org.apache.lucene.index.ConcurrentMergeScheduler@13ad085 ramBufferSizeMB=16.0 maxBufferedDocs=-1 maxBuffereDeleteTerms=-1 maxFieldLength=50 index=
maxFieldLength 50 reached for field test, ignoring following tokens
IW 0 [Tue Jun 14 16:45:11 CST 2011; main]: now flush at close
IW 0 [Tue Jun 14 16:45:11 CST 2011; main]: flush: now pause all indexing threads
IW 0 [Tue Jun 14 16:45:11 CST 2011; main]: flush: segment=_0 docStoreSegment=_0 docStoreOffset=0 flushDocs=true flushDeletes=true flushDocStores=true numDocs=1 numBufDelTerms=0
IW 0 [Tue Jun 14 16:45:11 CST 2011; main]: index before flush
IW 0 [Tue Jun 14 16:45:11 CST 2011; main]: DW: flush postings as segment _0 numDocs=1
IW 0 [Tue Jun 14 16:45:11 CST 2011; main]: DW: closeDocStore: 2 files to flush to segment _0 numDocs=1
IW 0 [Tue Jun 14 16:45:11 CST 2011; main]: DW: oldRAMSize=111616 newFlushedSize=1241 docs/MB=844.944 new/old=1.112%
IW 0 [Tue Jun 14 16:45:11 CST 2011; main]: flushedFiles=[_0.fdt, _0.frq, _0.nrm, _0.fdx, _0.tii, _0.tis, _0.fnm, _0.prx]
IFD [Tue Jun 14 16:45:11 CST 2011; main]: now checkpoint "segments_1" [1 segments ; isCommit = false]
IFD [Tue Jun 14 16:45:11 CST 2011; main]: now checkpoint "segments_1" [1 segments ; isCommit = false]
IFD [Tue Jun 14 16:45:11 CST 2011; main]: delete "_0.fdt"
IFD [Tue Jun 14 16:45:11 CST 2011; main]: delete "_0.frq"
IFD [Tue Jun 14 16:45:11 CST 2011; main]: delete "_0.nrm"
IFD [Tue Jun 14 16:45:11 CST 2011; main]: delete "_0.fdx"
IFD [Tue Jun 14 16:45:11 CST 2011; main]: delete "_0.tii"
IFD [Tue Jun 14 16:45:11 CST 2011; main]: delete "_0.tis"
IFD [Tue Jun 14 16:45:11 CST 2011; main]: delete "_0.prx"
...
当然,除了直接在IndexWriter的构造器中指定maxFieldLength,还可以通过 writer.setMaxFieldLength(xxx); 方法来设定该值,对应的还有个 writer.getMaxFieldLength(xxx); 方法。
另外,Lucene内置了两个限制值,一个是 0x7fffffff,一个是 10000,它们分别是MaxFieldLength.UNLIMITED(无限制,但事实是限制在最大整数范围内)和MaxFieldLength.LIMITED(其值设定为10000).
发表评论
-
20) 第二章 索引:缓冲
2012-04-20 22:38 1325Lucene在添加或删除文 ... -
19) 第二章 索引:用IndexReader删除文档
2012-04-19 22:17 1827除了IndexWriter外,IndexReader也可 ... -
18) 第二章 索引:锁策略--Lucene自身提供的锁实现
2011-07-08 17:57 2170首先需要清楚一个大前提:在同一个索引文件上,一次只能 ... -
17) 第二章 索引:优化索引(Optimizing)
2011-06-23 13:59 1794索引文件的多个段可以合并成一个或少量几个。这样将节省 ... -
15) 第二章 索引:设计用来排序的域
2011-06-14 09:38 868这一节非常非常简单,场景是这样的:我们对Luce ... -
14) 第二章 索引:用Lucene索引数字
2011-06-13 14:28 2236索引数字的场景主要有两种:一是把它们当作字符串一 ... -
13) 第二章 索引:用Lucene索引日期和时间
2011-06-10 17:46 2785对Lucene而言,每个域都是String类型。 ... -
12) 第二章 索引:规则(Norms)
2011-06-10 10:32 1077在索引阶段,文档(Document)中每个被索引 ... -
11) 第二章 索引:文档优先策略(Boosting)
2011-06-09 14:47 1108请先确认一句话:“并非人人生而平等!”。对于Docum ... -
10) 第二章 索引:Field中含多个值的问题
2011-06-08 17:17 1591假设你的Document中有一个名为" ... -
9) 第二章 索引:Field的设置
2011-06-08 16:25 1245Field也许算是Lucene索引阶段最重要的类 ... -
Hibernate Search常用注解总结
2011-06-08 14:08 65071. @Indexed -> index ... -
8) 第二章 索引:基本索引操作
2011-06-07 15:09 1420先上示例代码,原意看的就看,不愿意看的先略过,回 ... -
7) 第二章 索引:理解Lucene索引过程
2011-06-07 11:32 1212Lucene索引的API非常简单,然而在其 ... -
6) 第二章 索引:Lucene索引的文档模型
2011-06-07 10:57 11021. 文档(Document)和域(Field) ... -
5) 第一章 初识Lucene:理解核心搜索类
2011-05-31 17:22 10731. IndexSearcher Ind ... -
4) 第一章 初识Lucene:理解核心索引类
2011-05-30 17:18 12191. IndexWriter Index ... -
3) 第一章 初识Lucene:一个简单的实例
2011-05-30 16:37 1178还是看代码来的直接: 1. 索引 imp ... -
2) 第一章 初识Lucene:索引和搜索
2011-05-30 15:31 11081. 为什么需要搜索 为什么需要高效的、准确的搜索 ... -
1) 第一章 初识Lucene:简介
2011-05-30 14:05 14161. Lucene是什么 Lucene是一个高性能 ...
相关推荐
第十一章:索引 第十二章:约束 第十三章:视图 第十四章:同义词 第十五章:序列 第三部分:SQL语言的扩展 第十六章:INSERT语句总结 第十七章:DML和DDL语句的其他用法 第十八章 通过GROUP BY产生统计...
第六章:索引 第七章:视图 第八章:集群 第十章:用户,资源文件,角色喝授权 第十一章:其他管理特性 第十二章:优化器 第十三张:其他命令 第十四章:内置函数 第十五章:DML命令 附录A:初始化参数 附录B:数据...
MySQL 索引:索引为什么使用 B+树? · .pdf
34丨MySQL调优之索引:索引的失效与优化.html
MySQL索引:优化查询的利器
o非聚集索引:非聚集索引就是以非主键创建的索引,在叶子节点存储的是主键和索引列。 逻辑维度 o主键索引:一种特殊的唯一索引,不允许有空值。 o普通索引:MySQL中基本索引类型,允许空值和重复值。 o联合索引:多...
第四章:使用索引 第五章:约束的作用 第六章:视图、同义词和序列 第七章:Insert语句语法 第八章:DML和DDL语句 第九章:Select的高级应用 第十章:Oracle的国际化支持。 由于文件过大,只提供百度网盘下载地址和...
它把相似哈希作为文件的特征, 是一种适用于以小文件为主的数据负载的重复数据删除的二级索引。实验结果表明, 相似索引的重复数据删除率比EB高24. 8%; 相似索引的内存使用量仅仅是EB的0. 265%。与EB相比, 相似索引...
深入解析MongoDB聚合与索引:提升数据库效能的关键策略
MySQL中索引的类型 一般可分为四类: 普通索引:最普通的索引 唯一索引:索引列的值必须唯一,但允许有空值 主键索引:一种特殊的唯一索引,不允许有空值 联合索引:索引列有多个字段,使用时需要满足最左前缀...
内存数据索引:以处理器为核心的性能优化技术.pdf
GP索引:一种基于HBase的多维索引,陈汉,胡铮,随着互联网数据量爆发式的增长,分布式数据库HBase发挥了举足轻重的作用。但是在面对众多的移动互联网服务,例如基于位置的服务(L
Hive编程指南中文版 2013年12月 第1版 ...第16章 Hive的Thrift服务 第17章 存储处理程序和NoSQL 第18章 安全 第19章 锁 第20章 Hive和Oozie整合 第21章 Hive和亚马逊网络服务系统 第22章 HCatalog 第23章 案例研究
以下是版本 8 Mplus 用户指南的摘录。第 3 章 - 第 13 章包括 250 多个示例。...第16章:分析命令 第17章:MODEL命令 第 18 章:输出、保存数据和绘图命令 第19章:蒙特卡洛命令 第20章:Mplus语言摘要 引用/索引
第二章:sql基础 ORACLE数据类型 SQL基本语法 简单查询 SQL函数 多数据表查询 事务控制 第三章:plsql基础 声明及变量 表达式 PL/SQL数据类型 流程控制 异常处理 过程 函数 游标 包 触发器 第...
以下是版本 8 Mplus 用户指南的摘录。第 3 章 - 第 13 章包括 250 多个示例。...第16章:分析命令 第17章:MODEL命令 第 18 章:输出、保存数据和绘图命令 第19章:蒙特卡洛命令 第20章:Mplus语言摘要 引用/索引
创建索引.txt
以下是版本 8 Mplus 用户指南的摘录。第 3 章 - 第 13 章包括 250 多个示例。...第16章:分析命令 第17章:MODEL命令 第 18 章:输出、保存数据和绘图命令 第19章:蒙特卡洛命令 第20章:Mplus语言摘要 引用/索引
以下是版本 8 Mplus 用户指南的摘录。第 3 章 - 第 13 章包括 250 多个示例。...第16章:分析命令 第17章:MODEL命令 第 18 章:输出、保存数据和绘图命令 第19章:蒙特卡洛命令 第20章:Mplus语言摘要 引用/索引
第6章:优化服务器设置 265 第7章:操作系统和硬件优化 305 第8章:复制 343 第9章:伸缩性与高可用性 409 第10章:应用层面的优化 457 第11章:备份与还原 472 第12章:安全 521 第13章:MySQL服务器的状态 557 第...