- 浏览: 85481 次
- 来自: 济南
文章分类
最新评论
-
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 1401Lucene在添加或删除文 ... -
19) 第二章 索引:用IndexReader删除文档
2012-04-19 22:17 1879除了IndexWriter外,IndexReader也可 ... -
18) 第二章 索引:锁策略--Lucene自身提供的锁实现
2011-07-08 17:57 2213首先需要清楚一个大前提:在同一个索引文件上,一次只能 ... -
17) 第二章 索引:优化索引(Optimizing)
2011-06-23 13:59 1861索引文件的多个段可以合并成一个或少量几个。这样将节省 ... -
15) 第二章 索引:设计用来排序的域
2011-06-14 09:38 896这一节非常非常简单,场景是这样的:我们对Luce ... -
14) 第二章 索引:用Lucene索引数字
2011-06-13 14:28 2275索引数字的场景主要有两种:一是把它们当作字符串一 ... -
13) 第二章 索引:用Lucene索引日期和时间
2011-06-10 17:46 2830对Lucene而言,每个域都是String类型。 ... -
12) 第二章 索引:规则(Norms)
2011-06-10 10:32 1117在索引阶段,文档(Document)中每个被索引 ... -
11) 第二章 索引:文档优先策略(Boosting)
2011-06-09 14:47 1145请先确认一句话:“并非人人生而平等!”。对于Docum ... -
10) 第二章 索引:Field中含多个值的问题
2011-06-08 17:17 1643假设你的Document中有一个名为" ... -
9) 第二章 索引:Field的设置
2011-06-08 16:25 1310Field也许算是Lucene索引阶段最重要的类 ... -
Hibernate Search常用注解总结
2011-06-08 14:08 65511. @Indexed -> index ... -
8) 第二章 索引:基本索引操作
2011-06-07 15:09 1462先上示例代码,原意看的就看,不愿意看的先略过,回 ... -
7) 第二章 索引:理解Lucene索引过程
2011-06-07 11:32 1239Lucene索引的API非常简单,然而在其 ... -
6) 第二章 索引:Lucene索引的文档模型
2011-06-07 10:57 11331. 文档(Document)和域(Field) ... -
5) 第一章 初识Lucene:理解核心搜索类
2011-05-31 17:22 11021. IndexSearcher Ind ... -
4) 第一章 初识Lucene:理解核心索引类
2011-05-30 17:18 12551. IndexWriter Index ... -
3) 第一章 初识Lucene:一个简单的实例
2011-05-30 16:37 1212还是看代码来的直接: 1. 索引 imp ... -
2) 第一章 初识Lucene:索引和搜索
2011-05-30 15:31 11451. 为什么需要搜索 为什么需要高效的、准确的搜索 ... -
1) 第一章 初识Lucene:简介
2011-05-30 14:05 14571. Lucene是什么 Lucene是一个高性能 ...
相关推荐
【数据库索引概述】 数据库索引是数据库管理系统中用于提高数据检索速度的一种数据结构。它类似于书籍的目录,提供了一种快速定位数据的方法。通过在数据表中创建索引,数据库系统可以避免全表扫描,直接找到所需的...
* 多列索引:针对多个字段,但是只有使用了索引的第一个字段,这个索引才能被使用。 * 空间索引:使用 spatial 参数建立,只针对空间数据类型。 创建索引的语法格式包括: * 在创建表时创建索引:Create table ...
数据库应用技术:第08章_索引与视图 本章主要讲述数据库应用技术中索引和视图的相关知识点。索引是与表或视图关联的磁盘上结构,索引中的键存储在一个结构中,使 SQL Server 可以快速有效地查找与键值关联的行。 ...
第十一章:索引 第十二章:约束 第十三章:视图 第十四章:同义词 第十五章:序列 第三部分:SQL语言的扩展 第十六章:INSERT语句总结 第十七章:DML和DDL语句的其他用法 第十八章 通过GROUP BY产生统计...
数据库索引基础知识点总结 数据库索引是数据库管理系统中提高查询效率的重要技术手段。索引可以看作是一种快速查找数据的数据结构,它可以根据字段值快速定位数据。索引的作用类似于书籍中的目录,能够快速地定位...
第六章:索引 第七章:视图 第八章:集群 第十章:用户,资源文件,角色喝授权 第十一章:其他管理特性 第十二章:优化器 第十三张:其他命令 第十四章:内置函数 第十五章:DML命令 附录A:初始化参数 附录B:数据...
第四章:使用索引 第五章:约束的作用 第六章:视图、同义词和序列 第七章:Insert语句语法 第八章:DML和DDL语句 第九章:Select的高级应用 第十章:Oracle的国际化支持。 由于文件过大,只提供百度网盘下载地址和...
根据给定的文件信息,我们将深入探讨SQL Server 2005中索引的重要知识点,包括索引的创建、管理以及其对查询性能的影响。 ### 1. 索引的概念与分类 索引是数据库中用于提高数据检索速度的数据结构。在SQL Server ...
《Phoenix构建二级索引——深度解析与实践指南》 在大数据处理领域,Phoenix以其高效、易用的特性,成为与Apache HBase结合的SQL查询引擎的首选。本指南将深入探讨如何在已有的Hbase环境中安装部署Phoenix,并利用...
2. 利用第三方组件:在HBase生态中,有如Apache Phoenix等组件提供了二级索引的功能。Apache Phoenix是建立在HBase之上的SQL接口,它使用HBase作为其底层存储引擎,同时提供了二级索引的管理功能。用户可以简单地...
Hive编程指南中文版 2013年12月 第1版 ...第16章 Hive的Thrift服务 第17章 存储处理程序和NoSQL 第18章 安全 第19章 锁 第20章 Hive和Oozie整合 第21章 Hive和亚马逊网络服务系统 第22章 HCatalog 第23章 案例研究
以下是关于“第9章 索引”这一主题的详细知识点讲解: 1. **索引的概念**:索引是数据库管理系统中用于提高数据检索速度的数据结构。它们类似于书籍的目录,允许快速定位到所需数据,而无需遍历整个表。 2. **B-...
二、唯一索引 1. 创建唯一索引:通过设置 "unique" 选项为 true 来创建唯一索引: ``` db.test.ensureIndex({"userid":1},{"unique":true}) ``` 2. 防止重复键:当尝试插入重复键时,MongoDB 会抛出 E11000 ...
以下是版本 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语言摘要 引用/索引
第6章:优化服务器设置 265 第7章:操作系统和硬件优化 305 第8章:复制 343 第9章:伸缩性与高可用性 409 第10章:应用层面的优化 457 第11章:备份与还原 472 第12章:安全 521 第13章:MySQL服务器的状态 557 第...
以下是版本 8 Mplus 用户指南的摘录。第 3 章 - 第 13 章包括 250 多个示例。...第16章:分析命令 第17章:MODEL命令 第 18 章:输出、保存数据和绘图命令 第19章:蒙特卡洛命令 第20章:Mplus语言摘要 引用/索引