Lucene Field(String name, Reader reader)问题
wangxuliangboy
2008-10-22
Lucene2.0以后Field加入了这个构造函数:
有个问题想请教: lucene Field(String name, Reader reader) 在这个构造函数中Field.Store,Field.Index其默认的值为Field.Store.NO和Field.Index.TOKENIZED 我想问,即然它不存储,又何必用这样一个构造函数.Reader读取还是要浪费资源的. LUCENE这样的作用有什么意义吗 |
|
moshalanye
2008-10-23
其实这样函数不就少了麻,而且index 是要nomalize的,读它的流应该从语义上更合理些,而且不论处理的是什么数据,它首先都是一个流,而且用reader作为参数,还能让人事先把这个reader 解决好,毕竟 数据的编码,coding的人更清楚 ,于其留给lucene的接口去判断 给的它的文件流或其他的 inputstream 是什么字符集, 不如让程序员自己做,这也是解耦的一种想法吧,不做多余又不讨好的事情
|
|
imjl
2008-10-24
wangxuliangboy 写道 Lucene2.0以后Field加入了这个构造函数:
有个问题想请教: lucene Field(String name, Reader reader) 在这个构造函数中Field.Store,Field.Index其默认的值为Field.Store.NO和Field.Index.TOKENIZED 我想问,即然它不存储,又何必用这样一个构造函数.Reader读取还是要浪费资源的. LUCENE这样的作用有什么意义吗 搜索量小的时候可以TOKENIZED和Store放在一起,但是大了,就需要分离 TOKENIZED 和 Store 一起的索引很大,当数据量达到一定规模时,它也必然会影响到搜索效率以及索引更新。 当doc大小差异大时,disk io的影响就比较突出,系统的可控性就低。 其实搜索的时候做的工作是到TOKENIZED内去寻找信息,然后再显示。 所以完全可以将它们分离。 通常之所以放在一起,无外乎还不清楚之间的关系只是小规模测试,知道迫于环境限制。 |
|
wangxuliangboy
2008-10-28
谢谢各位的回答.
我对imjl的回答存在一些疑问. "搜索的时候做的工作是到TOKENIZED内去寻找信息","所以完全可以将它们分离" 你的意思是不是当建立Field(String name, Reader reader) 这种类型的字段时候会分开存储.然后当搜索找到相关索引时,会去相关的地方找到这个READER..不知道我理解的正不正确.. 但是我在通过索引查找的时候,能查到其它类型Field的值,但是这种就是查不出值.. Hits hits=indexSearcher.search(query); Document doc=hits.doc(i); System.out.println(doc.get("content"));<为reader的字段名> |
|
moshalanye
2008-10-28
store 是存储 index 是索引
这两个是分开 store 分存储,压缩存储,不存储 (顾名思义,把reader拿到的东西全都存起来,如果reader读的数据量比较大,一般都是不鼓励存储,放在索引文件中会把索引文件撑大,一般把reader读取的数据和该document的synchronize Key field 进行绑定) index 分为 使用分词建立索引,不使用分词。 一般该document的synchronize Key field 是不进行分词,并将其存储的 所以才会有默认 store.no 和 index.tokenizer lucene的api 说的很清楚了 可以去看看的,源代码中的 field中所有的解释都应该有的 |
|
wangxuliangboy
2008-10-29
moshalanye 写道 store 是存储 index 是索引
这两个是分开 store 分存储,压缩存储,不存储 (顾名思义,把reader拿到的东西全都存起来,如果reader读的数据量比较大,一般都是不鼓励存储,放在索引文件中会把索引文件撑大,一般把reader读取的数据和该document的synchronize Key field 进行绑定) index 分为 使用分词建立索引,不使用分词。 一般该document的synchronize Key field 是不进行分词,并将其存储的 所以才会有默认 store.no 和 index.tokenizer lucene的api 说的很清楚了 可以去看看的,源代码中的 field中所有的解释都应该有的 谢谢您的回答.. 我知道Field("",Reader),默认会为store.no 和 index.tokenizer; 如果不存储的话,,我们又何必把它读进来呢... |
|
imjl
2008-10-30
wangxuliangboy 写道 谢谢各位的回答.
我对imjl的回答存在一些疑问. "搜索的时候做的工作是到TOKENIZED内去寻找信息","所以完全可以将它们分离" 你的意思是不是当建立Field(String name, Reader reader) 这种类型的字段时候会分开存储.然后当搜索找到相关索引时,会去相关的地方找到这个READER..不知道我理解的正不正确.. 但是我在通过索引查找的时候,能查到其它类型Field的值,但是这种就是查不出值.. Hits hits=indexSearcher.search(query); Document doc=hits.doc(i); System.out.println(doc.get("content"));<为reader的字段名> 我只说原理。代码不看的。 快速查询通常是先到索引中找到相关信息,然后再去拿需要显示的数据。 至于只索引不存储有啥用呢? 我换个你可以理解的角度来看,数据库字段索引过的信息检索速度快,而没有索引过的信息检索慢。 如果没有索引而只是存储,就如同数据库不做索引。 |
|
citymn520
2009-05-20
我只说原理。代码不看的。
快速查询通常是先到索引中找到相关信息,然后再去拿需要显示的数据。 至于只索引不存储有啥用呢? 我换个你可以理解的角度来看,数据库字段索引过的信息检索速度快,而没有索引过的信息检索慢。 如果没有索引而只是存储,就如同数据库不做索引。 我想的是要索引也要存储.不然在高亮那块的时候.就不知道给什么给用户看.同样.存储了.可能性能就很差! 但是我在把有个上10000个文件做了索引不存储!同样出现了内存泄露的!请问这样的性能应该要怎么解决呢! |