更新记录

1.0.0(2026-07-19)

首发:自研(内置全文检索引擎 倒排索引 + 内置全文检索引擎-内置中文分词 中文分词)编写端侧持久化全文搜索核心,经 原生绑定层 生成 Kotlin/Swift 绑定


平台兼容性

uni-app x(5.14)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × 5.0 12 × ×

nex-search —— 高性能端侧全文搜索

自研端侧持久化全文搜索核心(倒排索引 + 中文分词),提供 uni-app 可调的对象型 JS API。

本地优先:数据与索引都在手机本地,万级文档毫秒级检索,免后端、离线可用。适合笔记类(Obsidian 竞品)、IM 聊天记录、离线文档/法规查询等场景。

能力(MVP 一期)

API 说明
openOrCreateSearchIndex(dirPath) 建/开一个磁盘持久化索引(App 启动建/开一次,全程复用)。
addDocument(doc) 加单条(未提交)。
addDocuments(docs)Promise<number> 批量加(后台线程,不卡 UI),返回成功条数。
commit()Promise<void> 持久化 + 刷新使新文档可见(后台线程)。
numDocs() 当前可搜文档数。
search(query) 布尔/短语/前缀 + 内置中文分词 中文分词 + <mark> 高亮 + 分页;返回 total/costMs/hits。

二期:update/delete/deleteAll、字段/标签/时间过滤、排序、拼音、进度回调。

用法

import { openOrCreateSearchIndex } from '@/uni_modules/nex-search';

// 1. App 启动建/开一次(落沙箱目录)
const index = openOrCreateSearchIndex(`${uni.env.CACHE_PATH}/search-index`);

// 2. 灌数据(批量异步,重活不卡 UI)
await index.addDocuments([
  { id: '1', title: '今天上海天气很好', body: '适合出门散步', timestamp: Date.now(), tags: ['生活'] },
  { id: '2', title: '原生 性能', body: '零成本抽象', timestamp: Date.now(), tags: ['技术'] }
]);
await index.commit(); // 提交后才可搜

// 3. 检索(中文分词 + 高亮)
const r = index.search({ text: '天气', limit: 20, offset: 0, highlight: true });
console.log(r.total, r.costMs);            // 命中总数、耗时(ms)
r.hits.forEach(h => console.log(h.title, h.snippet)); // snippet 含 <mark>天气</mark>

高亮 snippet 直接拼进页面:命中处 <mark>…</mark> 包裹、其余已 HTML 转义(防注入)。前端给 <mark> 配个背景色即可。

查询语法

QueryParser over title(权重×2) + body:布尔 AND/OR/NOT、短语 "..."、前缀 *;中文自动 内置中文分词 分词。非法语法(如不闭合括号)抛 Query 错误,不闪退。

安全加固

错误以异常(SearchError{InvalidParam,Io,Index,Query})形式抛出,绝不 panic/闪退; 守卫:单文档 ≤16 MiB、批量 ≤5 万条、limit ≤1000、查询串 ≤4 KiB、writer 堆 ≤64 MiB;坏索引目录 → Index/Io 错误。

状态

  • ⏳ UTS 桥接 / demo:本环境无 HBuilderX,已 best-effort 写就,标 TODO 待 HBuilderX 实测(数值转换、Record 构造、异步回主线程、iOS 模块解析等编译维度待 cli 验)。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据。所有计算/处理均在本地完成,无任何网络请求、不发送数据到任何服务器。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。