kkewwei opened a new issue, #14717:
URL: https://github.com/apache/lucene/issues/14717

   ### Description
   
   1. Reduce the match times for BKD node whose relation=`CELL_CROSSES_QUERY`.
   When performing range query, if the Relation is `CELL_CROSSES_QUERY`, we 
need to traverse each value in this leaf node for `matches`. A segment query 
typically involves two leaf nodes with Relation set to `CELL_CROSSES_QUERY`, 
leading to 512×2 `matches`.
   
   In reality, the 512 values on each BKD leaf node are stored in a compressed 
format, such as "30 consecutive 1, 30 consecutive 2, 30 consecutive 3.....". 
Notably, a run of `30 consecutive 1` only requires one `matching` instead of 
30. With this optimization, the BKD tree only needs a few `matching` rather 
than 512 per leaf.
   
   For a shard with 25 segments, the original approach would involve 25×512×2 = 
25,600 `matching` operations. Through the above optimization, however, a lot of 
reduction in `matching` can be achieved.
   
   
https://github.com/apache/lucene/blob/3c118d74d0bc1bc194272774605c1c1e57232925/lucene/core/src/java/org/apache/lucene/util/bkd/BKDReader.java#L911
   ```
   ......
   scratchIterator.reset(i, length);
    if (visitor.compare(scratchPackedValue, scratchPackedValue) == 
PointValues.Relation.CELL_INSIDE_QUERY) {
             visitor.visit(new IntsRef(scratchIterator.docIDs, i, length));
   }
   ......
   ```
   
   2. When calling `PointValues.intersect()`, if there is no matching node 
left, we should exit promptly.
   For example, in the following case, only leaf node 7 matches. In reality, we 
would visit nodes from 1 to 13.
   When visiting leaf node 7: relation = CELL_CROSSES_QUERY
   When visiting leaf node 8: relation = CELL_OUTSIDE_QUERY
   Once the relation changes to CELL_OUTSIDE_QUERY in node 8, we should exit 
immediately instead of continuing to visit nodes 9 to 13.
   
![Image](https://github.com/user-attachments/assets/fa33e09a-957a-4406-b495-925bc40f1f4b)


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to