msokolov commented on code in PR #13872:
URL: https://github.com/apache/lucene/pull/13872#discussion_r1811229378


##########
lucene/core/src/java21/org/apache/lucene/internal/vectorization/Lucene99MemorySegmentByteVectorScorerSupplier.java:
##########
@@ -112,20 +96,20 @@ static final class CosineSupplier extends 
Lucene99MemorySegmentByteVectorScorerS
     @Override
     public RandomVectorScorer scorer(int ord) {
       checkOrdinal(ord);
+      MemorySegmentAccessInput slice = input.clone();
+      byte[] scratch1 = new byte[vectorByteSize];
+      byte[] scratch2 = new byte[vectorByteSize];

Review Comment:
   Yeah, this just seemed cleaner than trying to make that conditional, and my 
assumption is these scorers are not created that often? Once per search? 
Although I guess when indexing that could be a lot (once per doc). The 
challenge here is that `getSegment()` is a member of the Supplier while the 
Scorers are the ones that should be supplying the scratch data, so we can't 
easily create scratch lazily. I guess we could create some new abstraction in 
here to handle that but it seems kind of messy.
   
   Is there some way to know "up front" whether a memorysegment is going to be 
produced?  If we knew that we could allocate scratch space or not based on that 
knowledge. I have to say I'm a little lost in this java21 MemorySegment code -- 
maybe @ChrisHegarty will weigh in and explain what the conditions are that lead 
to segmentSliceOrNull returning null?



-- 
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

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