Skip to content
Search ffkv docs

Search the complete handbook, locally.

    FT.CURSOR READ

    Reads from a cursor

    Browse all commands · Upstream source documentation

    Reference fieldValue
    Canonical nameFT.CURSOR READ
    Catalog groupSearch commands
    Upstream since1.1.0 — upstream Redis/module version, not an ffkv release
    Pinned catalogRedis 8.10.0
    FT.CURSOR READ index cursor id [COUNT read size]

    Search worker configuration controls a real Rayon pool; GC schedules generation-fenced Rust compaction, not a POSIX fork. Search indexes and documents are bounded and RAM-resident; upstream syntax is not a promise of every option combination or Redis module ABI parity.

    Source: README.md:375–377, 636–642; src/engine/search/; tests/bdd/features/search.feature.

    All requests share the 8 MiB framing/1,024-argument ingress limit; normal RESP replies have 64 MiB wire/logical budgets with bounded nesting/value counts. Management and Lua origins impose smaller budgets. These are not a process RSS cap. Catalog inclusion is not exhaustive option or wire-format parity. See limits and compatibility.

    This command is in the canonical catalog but has no matching entry in the pinned src/command_metadata.json. Argument flags, complexity and key specifications are not invented. Use the syntax, upstream source documentation and actual scenario evidence below.

    These are source observations, not a test run performed by this documentation build. A tag identifies scenario intent; an extracted vector identifies a command invocation, which may intentionally produce an error. Scenarios may require setup, multiple connections, persistence, cluster nodes or native-module fixtures.

    • A cursor advances real pipeline state without duplicate or skipped rows — tests/bdd/features/search.feature:598; command tag and invocation observed.
    • Deleted cursor handles cannot be reused — tests/bdd/features/search.feature:637; invocation observed.

    The following JSON arrays are the test harness’s argument vectors, not shell commands. Numeric arguments are converted by the harness; objects of the form {"base64":"…"} represent decoded binary bytes, not a literal JSON command argument. Preserve scenario setup and connection ordering. See the CLI guide for shell quoting and binary stdin. No reply is invented or inferred.

    A cursor advances real pipeline state without duplicate or skipped rows — tests/bdd/features/search.feature:613 (I execute:)

    [
    "FT.CURSOR",
    "READ",
    "idx",
    {
    "saved": "cursor"
    },
    "COUNT",
    "2"
    ]

    Next source assertion: the reply has JSON path “0” equal to:

    [4,["title","b"],["title","c"]]

    Deleted cursor handles cannot be reused — tests/bdd/features/search.feature:656 (I execute:)

    [
    "FT.CURSOR",
    "READ",
    "idx",
    {
    "saved": "cursor"
    }
    ]

    Next source assertion: the reply is an error with code “ERR”

    A cursor advances real pipeline state without duplicate or skipped rows — tests/bdd/features/search.feature:622 (I execute:)

    [
    "FT.CURSOR",
    "READ",
    "idx",
    {
    "saved": "cursor"
    },
    "COUNT",
    "10"
    ]

    Next source assertion: the reply equals:

    [[4,["title","d"]],0]