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?

Reply via email to