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个文件做了索引不存储!同样出现了内存泄露的!请问这样的性能应该要怎么解决呢!
Global site tag (gtag.js) - Google Analytics