ucene Collector用于收集搜索之后的文档,可以方便做filter等,主要接口有setScorer,collect,setNextReader,acceptsDocsOutOfOrder。
一般和scorer配合使用,acceptDocsOutOfOrder这个选项很重要,表明是否接受doc id乱序,返回true的话对于or操作,不需要从堆中选最小的将快很多,但对于分页时如果指定顺序和scorer界限,可以让分页不重复,这是个好处。
setNextReader一般设置docBase,collect是实际的收集操作。collector有几个sub class:
TopDocsCollector,TopScoreDocCollector,TopFieldCollector,TimeLimitingCollector,PositiveScoresOnlyCollector,CachingCollector,MultiCollector,其中重点关注TopScoreDocCollector,根据是否acceptOutOfOrder一起是否paging after,有InorderTopScoreDocCollector,InOrderPagingScoreDocCollector,OutOfOrderTopScoreDocCollector,OutOfOrderPagingScoreDocCollector。
吐槽一下:今天发现项目中根本没有scorer,而search时又又scorer的重复记分,search engine完全退化成布尔检索器,好像很奇葩。。
scorer根本不应该分开啊,这架构真奇怪。就应该没人维护一个search服务,哪能什么都想通用。。。
Read full article from 关于Lucene Collector - jollyjumper的专栏 - 博客频道 - CSDN.NET
No comments:
Post a Comment