benwtrent commented on code in PR #16092:
URL: https://github.com/apache/lucene/pull/16092#discussion_r3351687268


##########
lucene/core/src/java/org/apache/lucene/search/KnnFloatVectorQuery.java:
##########
@@ -95,6 +98,26 @@ public KnnFloatVectorQuery(
       String field, float[] target, int k, Query filter, KnnSearchStrategy 
searchStrategy) {
     super(field, k, filter, searchStrategy);
     this.target = VectorUtil.checkFinite(Objects.requireNonNull(target, 
"target"));
+    this.targetPreRotated = false;
+  }
+
+  private boolean targetPreRotated;
+
+  @Override
+  public Query rewrite(IndexSearcher indexSearcher) throws IOException {
+    if (targetPreRotated == false) {
+      FieldInfo fi =
+          
FieldInfos.getMergedFieldInfos(indexSearcher.getIndexReader()).fieldInfo(field);
+      if (fi != null
+          && fi.getVectorDimension() == target.length
+          && 
"true".equals(fi.getAttribute(RotationAwareKnnVectorsFormat.ROTATION_ENABLED_KEY)))
 {
+        float[] rotated = new float[target.length];
+        HadamardRotation.forDimension(fi.getVectorDimension()).rotate(target, 
rotated);

Review Comment:
   > perhaps we need a global pre-processing step in the format itself?
   
   This is difficult, every segment could have a different format version. 
There isn't really an idea of a "global format for all the segments". 
   
   I think it is possible to simply provide hints that preprocessing has 
occurred. For example, first iterate all segments, preprocessing the query and 
this provides some metadata on the query indicating that its been appropriately 
pre-processed. Then when its passed during the query, that metadata can be 
checked for. If its there, huzzah! Processed! Otherwise, go the slow path and 
preprocess. 
   
   I am not 100% sure this type of API will work either :/



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

Reply via email to