@delali/narsil

中文文档
0.4.0发布于 2026/11/14Apache-2.0TypeScriptES Module构建来源已验证近 30 天下载 1.2万

分布式搜索引擎全文,矢量,混合,和地理搜索。一个引擎,嵌入或在服务器上,具有跨语言。nrsl格式。

中文使用文档
文档目录12 节
  1. 目录
  2. 安装
  3. 用编码代理添加 Narsil
  4. 快开始
  5. 特征
  6. 文档
  7. 实例
  8. 分发
  9. 搜索质量
  10. 运行时间支持
  11. 其他语文
  12. 许可证

Narsil, an open source search engine

纳西尔

CI npm downloads types license

用您的数据缩放的搜索引擎 .

Narsil是一个开源搜索引擎,在一个打入的索引上带有全文,矢量,杂交,和地心搜索. 您可以将 Narsil 嵌入到您的应用程序中, 即引擎在没有网络跳动的情况下进行搜索, 或者将它作为独立的搜索服务器, 配有 REST API, 写头日志, 以及批量 NDJSON 摄入 。 两种形式都包含同样的引擎,它以一种跨语言二进制格式存储索引(.nrsl),这样你就可以将一个索引从一个形式加载到另一个形式.

引擎分出跨工人的大指数,将分出的结果合并成一个排行榜. 此 TypeScript 软件包是该软件的参考执行 .nrsl 格式,以及 一个粗箱和一个去模块 用这些语言为程序设置相同的引擎.

在BEIR SciFact上,纳西尔的BM25排名得分为0.681分nDCG@10分,在0.679的安塞里尼参考数的0.002分以内. 弹性搜索分数为0.679分,OpenSearch分数为0.679分,查询相同. 在"SciFact"上,Narsil回答4200个关键词的查询,在它的高峰时为一秒,而"OpenSearch"则以3,027. 在DBpedia实体1M上,每个引擎被扣在0.99 record上,Narsil在其峰值时回答670个向量查询一秒,而OpenSearch则以869来领先. 随着每台引擎在同一集的推荐出产设置,纳西尔在峰值时回答1,154个向量查询一秒,而OpenSearch则跟随1,111. Narsil在20个关键词中的16个中拥有最高的吞吐量,矢量,以及最新收录的运行中的混合比分:每台引擎在等同的设置下为8个,每台引擎推荐的生产设置下为8个. 在2026-09-28年的运行中 20260928T002255ZGCP c3标准8硬件在我们的中央1-a,我们东1-b,我们西1-a主持发动机. 你会发现每个数据集,每个引擎的设置, 和全方法在 BENCHMARKS.md。 。 。 .

在浏览器中尝试 narsil.sondelali.com/demo 互联网档案馆的存檔,存档日期2013-12-02。在 narsil.sondelali.com/docs (中文(简体) )。 。 。 .

纳西尔 是托尔基安的魔戒之王埃伦迪尔之剑 被打碎后被重塑 名称符合设计,因为引擎将您的数据分割成一个分区,并持续一个分区,然后将结果合并为每个查询的排名列表.

目录

安装

pnpm add @delali/narsil

Narsil在Node.js 22或更新,而Bun,Deno,以及浏览器中工作. 这个 运行时间支持 表格覆盖每次运行的时间.

在macOS,Linux,或Windows下的arm64或x64机上,包管理器还将Narsil的原生搜索核心安装在C中作为可选的依赖,因此引擎通过它来分析文本并解答关键词和向量搜索. 如果您省略了可选的依赖性, Narsil 通过 Web Assembly 和 TypeScript 来完成,结果与浏览器中总是一样.

用编码代理添加 Narsil

这个 纳尔西尔技能 告诉编码代理是嵌入Narsil还是服务它,哪个包可以同时安装,哪个服务器设置可以保证公共地址的安全. 用 CLI 技术将技能安装到机器上的编码代理 :

npx skills add assetcorp/narsil

该技能使代理读取了您项目安装的"纳尔西尔"版本,并将代理发送到该版本的类型和文档. 打开 代理页面,您可以复制一个设置编码代理的提示,用于执行六个搜索任务中的一个.

快开始

import { createNarsil } from '@delali/narsil'

const narsil = await createNarsil()

await narsil.createIndex('products', {
  schema: {
    title: 'string',
    description: 'string',
    price: 'number',
    inStock: 'boolean',
    category: 'enum',
    tags: 'string[]',
  },
  language: 'english',
})

await narsil.insert('products', {
  title: 'Mechanical Keyboard',
  description: 'Cherry MX Brown switches with PBT keycaps and USB-C connection',
  price: 129.99,
  inStock: true,
  category: 'electronics',
  tags: ['peripherals', 'typing', 'mechanical'],
})

const results = await narsil.query('products', {
  term: 'mechanical keyboard',
  filters: {
    fields: {
      inStock: { eq: true },
      price: { lte: 200 },
    },
  },
  boost: { title: 2.0 },
  limit: 10,
})

每一次命中都持有文件,其ID,和其BM25分. 除了点击, results.count 持有匹配文件的总数, results.elapsed 以毫秒计的查询时间,以及 results.coverage 计算答案后面的分区,这样您就可以分辨一个集群何时从其部分数据中解答.

特征

寻取. 对于 全文搜索,引擎使用 BM25 的分数,并且支持场增分,模糊相匹配通过有界限的Levenshtein 相距,通过上字前缀相匹配进行搜索,以及术语覆盖和分数阈值. 您可以将查询与 过滤器、侧面、排序、分组、光标页和粘接结果在您声明的字段上 模式搜索中,过滤器可以在任何值内找到文本 contains,对照通配符模式测试整个值,寻找正则表达式的匹配值,并接受一个或两个在一个 eq 测试。 与 部分词搜索中,查询单词在较长的单词中也匹配,因此搜索 proof 发现 waterproof。 。 。 .

向量和混合检索. 对于 向量搜索,引擎通过同位素相似性,点出产物,或欧几利得距离来比较向量. 它精确地扫描一个字段,直到字段持有1,024个向量,一个您可以改变的计数,之后它会构建一个HNSW图,默认时使用最优化的分量. 在浏览器外,在 macOS 、 Linux 或 Windows 下的 arm64 或 x64 机器上,通过一个图像搜索引擎 c中的原生核,它返回与其WebAssembly搜索相同的结果。 对于 混合搜索,发动机通过对等级聚变或线性混合来导出BM25和矢量排名. 嵌入适配器 在插入和查询时将文本转换为向量,通过OpenAI,本地变换器。 js 模型,或您写的适配器. 查询可以 重新排序 它的顶部点击器是交叉编码器,通过Cohere兼容的再排序服务,本地变形器.js模型,或您所写的适配器.

地理学报. 地理过滤器 以半径匹配文档, 使用 Haversine 或 Vincenty 距离, 或多边形封装 。 您可以将地理过滤器与所有其他查询功能结合起来.

存储. 持久性适配器 在文件系统、索引数据库、内存或后端存储索引。 随着耐久性的提高,发动机保留有有定期检查站的写头日志,并会在坠机后自动恢复. 您可以将整个索引流入一个可移植快照档案, 或者导出其文档为 JSON Lines , 将索引移动到各个版本 。 与 设备同步,手机,笔记本电脑,或浏览器标签从服务器上保存一个索引的副本,在服务器下线时进行搜索并写入.

规模. 引擎将每个文档引导到 a 分区 由决定的散去。 当你打电话 rebalance(),引擎在网络上重塑分区,并缓冲收到的写入以写出头列. 一旦一个索引持有了1000个文档,该引擎就服务于工人复制品在工人线程上的一半的关键字查询,而HTTP服务器则接收持有这些线程上的请求.

行动. 这个 HTTP 服务器 子路径用健康探测器将一个引擎包裹在REST API中,散装NDJSON导入,快照并恢复端点,以及基于任务的长期操作. 这个 客户端 子路径从一个浏览器或从节点调用其中的每一条路由,以引擎自己的方法名. 这个 反应 子路径将读取的方法转换为钩子,可以调用同一页面中的客户端或引擎. 对于观察,你有 事件、插件和内存报告。 。 。 . 语言模块 包括指南所列语言,包括斯瓦希里语、约鲁巴语、豪萨语和其他非洲语言,每个模块都是单独的切入点.

文档

指南它包含什么
配置每个 createNarsil 选项、 工人调制、 分析重建、 以及示意器缓存
索引和文件Schemas,索引管理,插入,读取,更新,去除和分批操作
全文搜索术语查询、模糊匹配、前缀补全、阈值、突出显示、评分模式和建议
过滤器、相片和相片字段、阵列、存在和地理过滤器、平面计数、排序、分组、光标和定点
矢量搜索矢量场、距离测量、HNSW推广、量化、本土搜索核心和图维护
混合搜索文本和向量排列的对等分级组合和线性混合
地理搜索半径和多边形过滤器,以及两个相距公式
嵌入适配器自动嵌入插入和查询、 命名适配器、 捆绑的和自定义的
重新排队用交叉编码器、捆绑的调整适配器和自定义适配器重排上下接键
持久性和持久性存储后端、写头日志、检查站、恢复、快照、文件出口和早期发布的索引
分区和工人分区路线,在线再平衡,工人副本,多站无效
语文支助每个语言模块,分析修改和重建, 并命名标语器和停止单词
HTTP 服务器将引擎包入 REST API, 它所服务的每一条路由, 以及长期任务
集群模式多节点索引:节点和角色、复制、路由书写、分布式搜索和阅读,以及集群中失败的呼叫
客户端从浏览器或节点访问服务器, 执行任务, 以及它提出的代码
Python 客户端从 Python 到达服务器或集群, 以阻塞和同步形式, 以及故障规则
去客户端从 Go 到达服务器或集群, 流出快照, 以及故障规则
原生反应IOS 或 Android app内部的引擎, 索引所生活的地方、快照、内存和出错
设备同步搜索和写离线设备、同步路线、冲突以及快照上的索引副本
更改抓取在后端服务的索引上,每个插入、更新和去除后端服务的种子、过滤器和再链接
大众查询建议整个搜索,人们运行和点击, 计算每个人, 构建一个建议指数, 隐私权衡
反应钩在页面中的客户端或引擎上,每个键一个共享请求,从组件装入一个元件
观察性插件钩子、引擎事件和内存报告
错误你最常处理的密码 还有三套 NarsilError.code 覆盖

这个 规格 定义 .nrsl 格式、分析程序以及每个执行必须坚持的复制变量.

实例

示例显示什么
HTTP 服务器发射装置作为REST服务服务,具有耐久性,API-key auth,和多克包装等功能,而每个设置都来自环境.
浏览器该应用程序将引擎嵌入到一个有索引DB持久性和Web Worker搜索的浏览器中.
服务器应用程序该应用程序通过客户端SDK和React hooks将HTTP服务器称为装入corpora作为导入任务. 在其"问"观点中,你可以问关于那些蝎子的问题.

分发

@delali/narsil/distribution 持有 Narsil 的多节点集群模式:节点和角色,复制,等同测试和进程内测试的可协调适配器,TCP和gRPC的传输与相互的TLS,以及分布式查询路由. 集群节点可以创建,放出,清除,写入,更新,搜索,列表,计数,并跨出每个分区提出建议,它可以改变一个索引的复制因子和分区计数. 一个有耐用目录的节点将它的ID保存在那里,跨越重启,而等效协调器通过TLS连接上一个用户和一个密码. HTTP服务器前方的节点报告集群的健康状况和节点的"Prometheus"度量衡. 这个 集群仪表板实例 启动三个对等的节点,并在剪切网络链接时显示每个分区的状态。 这个 分组指南 覆盖API,包括等协奏器和gRPC运输每个需要的软件包. 将每项执行必须维护的合同改为: packages/spec/distribution。 。 。 .

搜索质量

我们测量排名质量 比利时 《犯罪事实调查》,载有5 183份文件和300起与人有关的判决。 我们把纳西尔和奥拉玛和米尼塞克 在一个过程中进行比较 所有三个词都使用相同的33个Lucene English stop words和默认的BM25参数,虽然每个词的出自英语不同. Narsil拥有3个中最高的nDCG@10.

这些衡量标准的含义是:

  • nDCG@10 (中文(简体) ) 衡量最相关的文件是否出现在结果的顶端。 得分1.0意味着完美的排名,而0.0则意味着前十名中没有相关文档出现.
  • 页:1 是十大相关结果中的一小部分.
  • 地图 跟踪显示相关文档的每个级别上的精确度。 一个更高的MAP表示相关文档集群接近排名的顶端.
  • 母 权 衡量第一个相关结果何时出现。 较高的MRR意味着第一个相关文档出现在更接近顶部.

连续集成执行一个单独的 SciFact 回归测试 在同一个机构。 当质量低于校准阈值时,该测试失败了构建.

以 pnpm --filter benchmarks bench -- --tiers relevance。 。 。 . 银行 拥有所有三个引擎的全部质量,吞吐量和耐用表.

纳西尔还充当了搜索服务器. 在BEIR数据集上,我们将服务器与Elasticsearch,OpenSearch,Qdrant,Weaviaate,Tortyense,和Meilisearch进行对比,跨越关键词,矢量和混合检索. 见 全部基准 为这些结果.

运行时间支持

运行时间货币持久性无效
节点.jsworker_threads文件系统基于适应器
阿宝worker_threads文件系统基于适应器
德诺网络工人文件系统广播频道
浏览器网络工人索引数据库广播频道

这个 浏览器示例 显示带有索引DB持久性的嵌入式引擎,而 服务器应用程序示例 在客户端SDK和反应钩上显示相同的接口.

其他语文

软件包它会做什么
delali-narsilRust 箱子在 Rust 程序内创建、修改和搜索索引.
github.com/assetcorp/narsil/packages/go/engineGo引擎在Go程序内创建,修改并搜索索引.
github.com/assetcorp/narsil/packages/goGo客户端呼叫了Narsil服务器,或一个集群的每一个节点,来自Go.
narsil-clientPython客户端呼叫一个Narsil服务器,或者一个集群的每一个节点,来自Python.
@delali/narsil-react-native司机将引擎放入iOS或Android应用程序.

Rust 箱子和 Go 引擎保存每个文件的布局与这个包相同,因此这个包可以打开一个任何一个保存的索引,而任何一个都可以打开这个包保存的索引. 只有这个包持有HTTP服务器和集群模式.

许可证

阿帕奇 - 2.0

版本与发布记录

@delali/narsil 共发布 133 个版本,首次发布于 2026/03/16;过去 12 个月发布了 133 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.4.0latest2026/11/14今天
0.3.1-next.197next2026/11/13今天
0.3.1-next.1962026/11/13今天
0.3.1-next.1952026/11/13今天
0.3.1-next.1932026/11/13今天
0.3.1-next.1892026/11/131 天前

关于 @delali/narsil 的常见问题

@delali/narsil 是什么?

分布式搜索引擎全文,矢量,混合,和地理搜索。一个引擎,嵌入或在服务器上,具有跨语言。nrsl格式。

如何安装 @delali/narsil?

在项目目录运行 npm install @delali/narsil,或使用 pnpm add / yarn add / bun add。

@delali/narsil 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@delali/narsil 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@delali/narsil 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@delali/narsil 可以商用吗?

@delali/narsil 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@delali/narsil 的下载量有多少?

根据 npm 官方下载统计,@delali/narsil 在 2026/10/12 – 2026/11/10 这 30 天内被下载 11,554 次,日均约 385 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@delali/narsil 还在维护吗?

最新版本 0.4.0 发布于 2026/11/14(今天);至今共发布 133 个版本,其中过去 12 个月发布了 133 个;首次发布于 2026/03/16。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。