@filter-enginez /核心
过滤器引擎-规则,组成,devtools,内部存储,动作日志,四种命名的CS算法(咆哮) 位图,r树,贝叶斯共生,MinHash + LSH)。同构:运行在浏览器、Node、Cloudflare Workers、Deno、 运行时。
安装
pnpm add @filter-enginez/core
位图加速使用 roaring-wasm,一个可选的对等依赖项:core不需要它就可以运行,而安装core则不能
安装它。要启用位图,请将其安装在core旁边并等待 initializeBitmapAcceleration() 一次启动(见
快速入门):
pnpm add roaring-wasm
没有它, initializeBitmapAcceleration() 拒绝。 FilterEngineModeError 谁的代码是
MODE_ACCELERATION_PEER_MISSING 它的信息是安装命令,引擎继续过滤它的
具有相同结果的谓词路径。引擎中没有任何东西为你调用它,所以从不调用的应用程序不需要任何东西
更多。
Sub-exports: @filter-enginez/core/keyboard/browser, @filter-enginez/core/similarity,
@filter-enginez/core/storage/browser, @filter-enginez/core/suggestions.
similarity 和 suggestions 单独的入口点是故意的:导入它们是可选择的,所以不导入它们
使他们的字节远离你的构建。
快速启动
import { createFilterEngine, initializeBitmapAcceleration, InSetRule, RangeRule } from '@filter-enginez/core';
import { type Wine, wines } from '@filter-enginez/mock-data/wine';
// Await this once at startup, with roaring-wasm installed. It loads roaring-wasm, which an app that
// never calls it does not bundle. The Roaring-Bitmap path stays OFF until it resolves —
// silently, so an app whose WASM asset is still in flight keeps working rather than
// throwing. Skipping it costs roughly 40x on a 10k corpus and raises no warning.
await initializeBitmapAcceleration();
const engine = createFilterEngine<Wine>({ sourceData: wines });
engine.addRule('price', new RangeRule('priceUsd', { min: 20, max: 60 }));
engine.addRule('varietal', new InSetRule('varietal', ['Merlot', 'Syrah']));
engine.getResults(); // every wine passing BOTH rules
engine.getResultCount(); // cheaper when you only need the number
规则和共同。将某一方面的规则命名为一组(engine.addGroup({ id, filterIds })); 对于任何
其他OR / NOT,与 and / or / not 并将结果传递给 engine.setExpression(...)。位图路径
用于连词,所以是一个表达式或an 'or' Group是按项计算的,结果是一样的。
错误
引擎产生的每一个错误都是a FilterEngineError 具有只读、机器可读的特点 code。四个子类名称
〇家庭 FilterEngineConfigError (配置文档、选项对象或绑定无效), FilterEngineRuleError
(规则类或序列化规则不可用; RuleRegistryError 扩展), FilterEngineModeError (例如
addRule() 当设置表达式时)和 FilterEngineDestroyedError 之后的任何方法 destroy()). 一个包裹
失败是标准 cause。代码联合也被导出(FilterEngineErrorCode 每班一个),所以a
switch 在 error.code 检查穷竭性。
import { createFilterEngine, type FilterEngineConfig, FilterEngineError } from '@filter-enginez/core';
declare const sharedConfig: FilterEngineConfig;
const engine = createFilterEngine({ sourceData: [] });
try {
engine.loadConfig(sharedConfig);
} catch (error) {
if (!(error instanceof FilterEngineError)) {
throw error;
}
console.warn(`Ignoring a config the engine refused: ${error.code}`, error.cause);
}
完整的代码表,以及每次抛出时的代码表 docs/architecture.md §2.5引擎存储库。
文档
的引擎存储库中有消费者指南 docs/guides/:
extending_rules.md-编写自定义FilterRule在序列化中幸存下来json_config.md-将过滤器声明为数据,以及为什么该格式可以安全地从租户接受acceleration_tuning.md-这五个是什么?acceleration切换是值得的,有衡量的worker_offload.md-在Web Worker中运行引擎
项目之家,有六个现场演示: https://filterenginez.com。文档站点: https://docs.filterenginez.com.
apache - 2.0。看到 LICENSE.md 和 NOTICE.md,两者都包含在此包中。