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

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions