Hi, I have performance issues with CachingWrapperQuery with lucene 5.2 and dont know how to solve it.
Prehistory: I have search with different parameters, where some parameters are used more frequently then others. For these params I used filters(and cached them), and my search looked like this BooleanFilter bf = new BooleanFilter (); bf.add(.., BooleanClause.Occur.MUST); //frequently used params here bf.add(.., BooleanClause.Occur.MUST); Filter searchFilter = new CachingWrapperFilter(bf); //and this filter object was reused between queries BooleanQuery searchQuery = new BooleanQuery(); searchQuery.add(.., BooleanClause.Occur.MUST); searchQuery.add(.., BooleanClause.Occur.MUST); hits = searcher.search(searchQuery, searchFilter, count, sort); And everything were great. I looked at two popular queries and each took 32 ms and 22 ms to execute. Now I did upgrade Lucene to 5.2 (from 5.0), and saw that filters are deprecated and its advisable to use queries and CachingWrapperQuery. So i changed sources to this: BooleanQuery bq = new BooleanQuery (); //now it becomes BooleanQuery bq.add(.., BooleanClause.Occur.MUST); //frequently used params here, same terms as before bq.add(.., BooleanClause.Occur.MUST); Query cachedQuery = new CachingWrapperQuery(bq); //this object is reused between queries BooleanQuery searchQuery = new BooleanQuery(); searchQuery.add(.., BooleanClause.Occur.MUST); searchQuery.add(.., BooleanClause.Occur.MUST); searchQuery.add(cachedQuery, BooleanClause.Occur.FILTER); //here i add cached part of the query hits = searcher.search(searchQuery, count, sort); Later I looked at same queries, and they took 145ms and 95ms to execute! Moving to CachingWrapperQuery was the only difference between queries, so question is: How to use CachingWrapperQuery right in my situation, or should I switch back to filters?