In the search use case in my application, I don't need to score query results 
since all results are equal. Also query patterns are also more or less fixed.



Given these conditions, I am trying to increase search performance by



1.     Using ConstantScoreQuery so that scoring overhead is removed since 
scoring is not required in my search use case. I also use a custom Sort object 
which does not sort by score (see code below).



Is this enough to remove scoring overhead in search?



2.     Using query cache



My understanding is that query cache would cache query results and hence lead 
to significant increase in performance. Is this understanding correct?



I am using Lucene version 5.4.1 where query cache seems to be enabled by 
default (https://issues.apache.org/jira/browse/LUCENE-6784), but I am not able 
to see any significant change in search performance.



Here is the code I am testing with:



DirectoryReader reader = DirectoryReader.open(directory);      //using 
MMapDirectory

IndexSearcher searcher = new IndexSearcher(reader);            //IndexReader 
and IndexSearcher are created only once

searcher.setQueryCachingPolicy(QueryCachingPolicy.ALWAYS_CACHE);



//search code

QueryParser parser = new QueryParser("fieldname", analyzer);

Query query = new ConstantScoreQuery(parser.parse("text"));



ScoreDoc[] hits = searcher.search(query, 20, sort).scoreDocs;





Given above conditions in my application, is there anything more I can do to 
get better search performance?







Reply via email to