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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]