krisk/Fuse · error · Error

FuseWorker does not support useTokenSearch: token search dep

Error message

FuseWorker does not support useTokenSearch: token search depends on corpus-level statistics (df, fieldCount) that are computed per shard, so per-shard scores would diverge from single-thread Fuse. Use Fuse on the main thread for token search.

What it means

Error "FuseWorker does not support useTokenSearch: token search depends on corpus-level statistics (df, fieldCount) that are computed per shard, so per-shard scores would diverge from single-thread Fuse. Use Fuse on the main thread for token search." thrown in krisk/Fuse.

Source

Thrown at src/workers/FuseWorker.ts:109

  private _nextId = 0
  private _workerUrl: string | URL

  constructor(
    docs: ReadonlyArray<T>,
    options?: IFuseOptions<T>,
    workerOptions?: FuseWorkerOptions
  ) {
    this._docs = docs.slice()
    this._options = options || ({} as IFuseOptions<T>)
    this._workerOptions = workerOptions || {}
    // Reject function-valued options eagerly. Without this check, postMessage
    // throws DataCloneError on first search() rather than at construction.
    FuseWorker._assertNoFunctionOptions(this._options)
    // Token search needs global corpus statistics, but each shard would build
    // its own — scores would diverge from single-thread Fuse. Refuse upfront
    // rather than silently returning ordering that doesn't match.
    if (this._options.useTokenSearch) {
      throw new Error(ErrorMsg.FUSE_WORKER_TOKEN_SEARCH_UNSUPPORTED)
    }
    this._workerUrl = this._workerOptions.workerUrl || resolveDefaultWorkerUrl()
  }

  private static _assertNoFunctionOptions<U>(options: IFuseOptions<U>): void {
    if (typeof (options as { sortFn?: unknown }).sortFn === 'function') {
      throw new Error(ErrorMsg.FUSE_WORKER_UNSUPPORTED_FN_OPTION('sortFn'))
    }
    if (typeof (options as { getFn?: unknown }).getFn === 'function') {
      throw new Error(ErrorMsg.FUSE_WORKER_UNSUPPORTED_FN_OPTION('getFn'))
    }
    if (typeof (options as { tokenize?: unknown }).tokenize === 'function') {
      throw new Error(ErrorMsg.FUSE_WORKER_UNSUPPORTED_FN_OPTION('tokenize'))
    }
    const keys = options.keys
    if (Array.isArray(keys)) {
      for (let i = 0, len = keys.length; i < len; i += 1) {
        const key = keys[i] as FuseOptionKey<U>

View on GitHub (pinned to edf2fb608e)

Solutions

  1. Do not pass useTokenSearch: true when using FuseWorker — omit the option to use the default matched-substring strategy
  2. Run Fuse on the main thread instead of FuseWorker if token search is required for your scoring needs
  3. Split your corpus so token-search queries are handled by a single-threaded Fuse instance while FuseWorker serves the rest
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/workers/FuseWorker.ts:109 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of krisk/Fuse@edf2fb608e (2026-09-02). Data as JSON: /api/errors/de5ebbc7a5f76332. Report an issue: GitHub.