[lucene] Lucene的疑难杂症(2)?

mniz 2010-01-10
上个帖子的问题先放一放。
那个太长,所以从新开个帖子

我想请教下关于排序的问题

Sort sort =  new Sort();
 SortField  sortfield = new SortField("add_time",SortField.INT,false);


add_time 字段存储了 ,类型是int 型

但是这样的排序,没有任何效果,不论设置升序还是降序 它默认都是升序

如果我换成字段 title 如:

Sort sort =  new Sort();
 SortField  sortfield = new SortField("title",SortField.STRING,false);


这样的话,就有效果,它就会是降序

我弄不明白为什么结果会是这样,难道上面的那个还有什么需要注意的地方吗?
如果上面的int 类型不拼配的话,我也转成STRING类型试过,同样还是没效果

不知道这样到底是什么原因,还请大家帮忙分析下原因,有人碰到过这样的事情吗?
mniz 2010-01-10
在自言自语一把,我想我明白哪里出问题,

建立索引的时候,不知道哪里不对了,从新建立的话,没问题了
mniz 2010-01-10
哎,咱问题真多,不过为了项目,咱还是的继续提问,希望知道的人帮助下。

我现在建立了一个过滤器,

final BitSet bitSet = new BitSet(indexReader.numDocs());
		bitSet.set(0,bitSet.size()-1);
		
		Term term = new Term("sex",String.valueOf(SEX_VALUE_1));
		TermDocs termDocs = indexReader.termDocs(term);
	
		while(termDocs.next()){
			bitSet.set(termDocs.doc(), false);
		}
		return bitSet;

termDocs.next()没有数据,不知道什么原因,但是我的数据库里面有数据,建索引的时候,只把这个sex 存下来了,没有分词,可是问题它就读不到数据,怎么回事,
而我页面能查询到数据、

当然页面搜索不是按照SEX 来查询的,是按照title

luckaway 2010-01-10
“sex”字段有索引了吗?

“male”->1,3,4,5,6
“female”->2,12,9,10

如果sex字段未索引就找不到docId--上面的数字。

Index的作用是引擎能找到这些DocId

Store的作用是通过docId找到那些的内容。

lucene的存储和索引分开的,没有直接的联系!

其实很多存储系统都一样



mniz 2010-01-10
晕倒,总做这种事情

我知道啥原因了 郁闷,发这种郁闷的帖子。。

呵呵,还是索引的问题
humans 2010-01-11
lucene2.9版本以前,所有写进去的都是文本型,所以 2 > 10 ,真的想对这个字段进行排序的话,需要用工具类做转换(做索引的时候和显示结果都要转换),如02 < 10,这样可能是你想要的结果。
mniz 2010-01-11
呵呵,不是,不需要的,在我建立索引的时候,给CEX 采用一种Field.Index.NOT_ANALYZED 就可以
seraphim871211 2010-01-11
humans 写道
lucene2.9版本以前,所有写进去的都是文本型,所以 2 > 10 ,真的想对这个字段进行排序的话,需要用工具类做转换(做索引的时候和显示结果都要转换),如02 < 10,这样可能是你想要的结果。



如果要在这个字段支持range query,是需要这样做的,排序则需要保证是Field.Index.NOT_ANALYZED或者你的Analyzer在分析的时候只产生一个token。
Global site tag (gtag.js) - Google Analytics