更新记录
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 验)。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 1178
赞赏 0
下载 12438100
赞赏 1934
赞赏
京公网安备:11010802035340号