docValues are the first thing I'd look at. What you've done is an
anit-pattern for scoring because it reads the stored data from disk
and decompress it to read the value; as you say costly.
Getting it from a docValues field, OTOH, will read the value(s)
directly from MMapDirectory space, i.e. the
I've implemented a custom Query whose responsibilities are as follows.
First, using an instance of a PointValues.IntersectVisitor classifying
documents as hit or not using a plong value. Secondly, calculating custom
scores using another document field, specified in the mapping as plongs.
The later