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
- Do not pass useTokenSearch: true when using FuseWorker — omit the option to use the default matched-substring strategy
- Run Fuse on the main thread instead of FuseWorker if token search is required for your scoring needs
- 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.