[lucene] 请教查询时如何限定某些条件?

luckaway 2010-01-19
不完全正确,并不是遍历结果集,而是遍历所有的文档(不是一定所有的文档,可能lucene会做了一些跳跃),找到你符合你Filter文档ID,然后再跟其他的其他条件的文档ID进行交集。

比方说:符合Fiter的条件有文档ID有:1,6,8,9
符合其他条件的文档ID有:5,6,7,9

那最终的返回结果就是:6,9



TonyLian 2010-01-19
luckaway 写道
不完全正确,并不是遍历结果集,而是遍历所有的文档(不是一定所有的文档,可能lucene会做了一些跳跃),找到你符合你Filter文档ID,然后再跟其他的其他条件的文档ID进行交集。

比方说:符合Fiter的条件有文档ID有:1,6,8,9
符合其他条件的文档ID有:5,6,7,9

那最终的返回结果就是:6,9



哦,相当于类似2次查询,然后取交集?
如果是这样的话,那想必速度是差的。
TonyLian 2010-01-21
请教 luckaway:

我想了一下,对比2楼和5楼的代码,都是“构建”一个query,然后这样search:
TopDocs topDocs = isearcher.search(query, count);

用的都是 search(Query query, int n)

而不是用 search(Query query, Filter filter, int n)

所以,2楼的方法的性能真的不如5楼吗? 真的是先查询,再筛选吗?

我的数据量太小,看不出耗时的差别。
luckaway 2010-01-21
数据量越多,而且该字段值的枚举越少,则差别越明显!
数据量越多,当字段值的枚举非常多的时候,效率反而是Filter高。
因为你的type枚举只有几个:sport、new。。
不过你数据量少,都无所谓了! 随你喜欢吧!
TonyLian 2010-01-21
还有一点就是,5楼的方法,由于 Type限定 也成了 query 的一部分,所以在查询的时候,Type的关键字,如“PDF",如果也出现在正文中,则这样的文件会提高相似度,就连高亮也会把"PDF"高亮出来的。

TonyLian 2010-02-01
今天又看到一个使用
MultiFieldQueryParser.parse()方法,结合
BooleanClause.Occur[]参数的方法。

感觉和5楼的似乎原来差不多,请高手来解释一下3种方法的区别吧。
Global site tag (gtag.js) - Google Analytics