Skip to content

Bug in the findAndRerank overload that accepts a class parameter? #86

@skedwards88

Description

@skedwards88

Bob claims that this is a client bug, though it could just be user error on my part:

❌ This prints empty documents:

import com.datastax.astra.client.DataAPIClient;
import com.datastax.astra.client.collections.Collection;
import com.datastax.astra.client.collections.commands.cursor.CollectionFindAndRerankCursor;
import com.datastax.astra.client.collections.commands.options.CollectionFindAndRerankOptions;
import com.datastax.astra.client.collections.definition.documents.Document;
import com.datastax.astra.client.core.query.Filter;
import com.datastax.astra.client.core.query.Projection;
import com.datastax.astra.client.core.query.Sort;
import com.datastax.astra.client.core.rerank.RerankedResult;
import lombok.Data;

public class Example {

  @Data
  public static class Projected {
    boolean is_checked_out;
    String title;
  }

  public static void main(String[] args) {
    // Get an existing collection
    Collection<Document> collection =
        new DataAPIClient("**APPLICATION_TOKEN**")
            .getDatabase("**API_ENDPOINT**")
            .getCollection("**COLLECTION_NAME**");

    // Find documents
    Filter filter = null;
    CollectionFindAndRerankCursor<Document, Projected> cursor =
        collection.findAndRerank(
            filter,
            new CollectionFindAndRerankOptions()
                .projection(Projection.include("is_checked_out", "title"))
                .sort(Sort.hybrid("A tree in the woods")),
            Projected.class);

    // Iterate over the results
    for (RerankedResult<Projected> result : cursor) {
      System.out.println(result.getDocument());
    }
  }
}

✅ Omitting the new class works:

import com.datastax.astra.client.DataAPIClient;
import com.datastax.astra.client.collections.Collection;
import com.datastax.astra.client.collections.commands.cursor.CollectionFindAndRerankCursor;
import com.datastax.astra.client.collections.commands.options.CollectionFindAndRerankOptions;
import com.datastax.astra.client.collections.definition.documents.Document;
import com.datastax.astra.client.core.query.Filter;
import com.datastax.astra.client.core.query.Projection;
import com.datastax.astra.client.core.query.Sort;
import com.datastax.astra.client.core.rerank.RerankedResult;

public class Example {

  public static void main(String[] args) {
    // Get an existing collection
    Collection<Document> collection =
        new DataAPIClient("**APPLICATION_TOKEN**")
            .getDatabase("**API_ENDPOINT**")
            .getCollection("**COLLECTION_NAME**");

    // Find documents
    Filter filter = null;
    CollectionFindAndRerankCursor<Document, Document> cursor =
        collection.findAndRerank(
            filter,
            new CollectionFindAndRerankOptions()
                .projection(Projection.include("is_checked_out", "title"))
                .sort(Sort.hybrid("A tree in the woods"))
            );

    // Iterate over the results
    for (RerankedResult<Document> result : cursor) {
      System.out.println(result.getDocument());
    }
  }
}

✅ Specifying a projection on the cursor works:

import com.datastax.astra.client.DataAPIClient;
import com.datastax.astra.client.collections.Collection;
import com.datastax.astra.client.collections.commands.cursor.CollectionFindAndRerankCursor;
import com.datastax.astra.client.collections.commands.options.CollectionFindAndRerankOptions;
import com.datastax.astra.client.collections.definition.documents.Document;
import com.datastax.astra.client.core.query.Filter;
import com.datastax.astra.client.core.query.Projection;
import com.datastax.astra.client.core.query.Sort;
import com.datastax.astra.client.core.rerank.RerankedResult;

public class Example {

  public static void main(String[] args) {
    // Get an existing collection
    Collection<Document> collection =
        new DataAPIClient("**APPLICATION_TOKEN**")
            .getDatabase("**API_ENDPOINT**")
            .getCollection("**COLLECTION_NAME**");

    // Find documents
    Filter filter = null;
    CollectionFindAndRerankCursor<Document, Document> cursor =
        collection.findAndRerank(
            filter,
            new CollectionFindAndRerankOptions()
                .sort(Sort.hybrid("A tree in the woods")));

    cursor.project(Projection.include("title", "is_checked_out"));

    // Iterate over the results
    for (RerankedResult<Document> result : cursor) {
      System.out.println(result.getDocument());
    }
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions