介绍
FlexSearch 是一个快速、零依赖的全文搜索库。 在原始搜索速度方面,FlexSearch 优于每一个搜索库, 并提供灵活的搜索功能,如多字段搜索,语音转换或部分匹配。根据使用的选项,它还提供最高内存效率的索引。 FlexSearch 引入了一种新的评分算法,称为“上下文索引”,基于预先评分的词典字典体系结构,与其他库相比,实际执行的查询速度有大幅度提高。 FlexSearch 还为您提供非阻塞异步处理模型,以通过专用平衡线程并行地对索引执行任何更新或查询。
特性
- 🚀 支持多种语系编码场景
- 🚀 支持配置多种初始化选项
- 🚀 支持 Index 索引、Document 多字段索引搜索
源码目录
├── AppScope
├── doc
├── entry0
│ └── src
│ └── main
│ ├── cangjie
│ │ └── src
│ └──resources
├── flexsearch
│ └── src
│ └── main
│ ├── cangjie
│ │ └── src
│ └── resource
├── hvigor
├── CHANGELOG.md
├── LICENSE
├── README.md
├── README.OpenSource
AppScope
全局资源存放目录和应用全局信息配置目录doc
API文档和使用手册存放目录entry
工程模块 - 编译生成一个HAPentry src
APP代码目录entry src main
APP项目目录entry src main cangjie
仓颉UI页面目录entry src main resources
资源文件目录flexsearch
工程模块 - 编译生成一个har包flexsearch src
模块代码目录flexsearch src main
模块项目目录flexsearch src main cangjie
仓颉代码目录flexsearch src main resources
资源文件目录flexsearch src main cangjie src
仓颉源码目录hvigor
构建工具目录
接口说明
主要是核心类和成员函数说明,详情见 API
使用说明
编译构建
- 通过module引入
- 克隆下载项目
- 将 flexsearch 模块拷贝到应用项目下
- 修改自身应用 entry 下的 oh-package.json5 文件,在 dependencies 字段添加 “flexsearch”: “file:…/flexsearch”
{
"name": "entry",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "",
"author": "",
"license": "",
"dependencies": {
"flexsearch": "file:../flexsearch"
}
}
- 修改自身应用 entry/src/main/cangjie 下的 cjpm.toml 文件,在 [dependencies] 字段下添加 flexsearch = {path = “…/…/…/…/flexsearch/src/main/cangjie”, version = “1.0.0”}
[dependencies]
flexsearch = {path = "../../../../flexsearch/src/main/cangjie", version = "1.0.0"}
- 在项目中使用 import flexsearch.* 引用flexsearch项目
import flexsearch.*
功能示例
document 多字段索引
import flexsearch.*
// 初始化
var documentOptions = DocumentOptions()
var document = Document(documentOptions)
// 添加
var target=JsonObject(HashMap<String,JsonValue>([("url",JsonString("url15")),
("tag",JsonString("拼接")),
("title",JsonString("拼接前")),
("content",JsonString("这是拼接前的值"))
]))
document.add(target,id:Option<String>.Some("appendTest"))
// 设置查询选项,进行查询
var searchOption=SearchOptions()
//设置查询tag
searchOption.tag=Option<Array<String>>.Some(Array<String>(["房产","疫情"]))
//设置查询显示条数
searchOption.limit=3
//在指定列查询
searchOption.index=ArrayList<String>(["title"])
//设置查询结果偏移量
searchOption.offset=0
document.search(query:"房地产", options:searchOption)
// 查询回调函数,根据需求自定义
public func CallbackSearchFunc(index:ArrayList<ArrayList<String>>):Unit{
index.append(ArrayList<String>(["CallbackSearchFunc"]))
}
// 异步查询
document.searchAsync(query:"房地产",callback:CallbackSearchFunc)
// 操作回调函数,根据需求自定义
public func CallbackFunc (document:Document):Unit{
var target=JsonObject(HashMap<String,JsonValue>([("url",JsonString("callback01")),
("tag",JsonString("callback01")),
("title",JsonString("callback01")),
("content",JsonString("callback01"))
]))
document.add(target)
}
// 追加
document.append(target,id:"appendTest")
// 异步追加
document.appendAsync(target,id:"appendTest",callback:CallbackFunc)
// 更新
document.update(target,id:"updateTest")
// 异步更新
document.updateAsync(target,callback:CallbackFunc,id:"updateTest")
// 移除
document.remove("updateTest")
// 异步移除
document.removeAsync("updateTest",callback:CallbackFunc)
//设置导出容器
var docdata=HashMap<String, HashMap<String, Any>>()
//设置导出回调函数
public func callbackExportDocument(id: String, pojo: HashMap<String, Any>) :Unit{
docdata.put(id,pojo)
}
// 导出数据
document.exportDocument(callbackExportDocument)
// 从容器导入数据,其中v为导出数据的容器,k为导入数据的对应的选项文件
document.importDocument("title.reg", docdata)
document.importDocument("title.cfg", docdata)
document.importDocument("title.map", docdata)
document.importDocument("title.ctx", docdata)
document.importDocument("title.oos", docdata)
Index 索引
import flexsearch.*
// 初始化
var options = Preset.DEFAULT.getIndexOptions()
var index = Index(options)
// 添加
index.add("26","z zz zzz")
// 异步追加,可根据需求自定义回调函数
// 定义操作回调函数
public func callbackOperatorfunc(index:Index):Unit{
index.add("1","callback")
}
index.addAsync("26", "z zz zzz",callback:callbackOperatorfunc)
// 查询
index.search(querys:"z zz zzz")
// 定义异步查询回调函数,可根据需求自定义
public func callbackSearchfunc(arr:ArrayList<String>):Unit{
for (i in 0..arr.size){
arr[i]+="end"
}
}
// 异步查询
index.searchAsync(callback:callbackSearchfunc,querys:"appendIndex")
// 追加
index.append("52","appendIndex")
// 异步追加
index.appendAsync("52","appendIndex",callback:callbackOperatorfunc)
// 移除
index.remove("26")
// 异步移除
index01.removeAsync("26",callback:callbackOperatorfunc)
// 更新
index.update("52","updateIndex")
// 异步更新
index.updateAsync("26", "updateIndex",callback:callbackOperatorfunc)
// 定义导出容器
var data=HashMap<String, Any>()
// 定义导出回调,可根据需求自定义
public func callbackExportIndex(id: String, pojo: HashMap<String, Any>) :Unit{
data.put(id,pojo[id])
}
// 导出
index.exportIndex(callbackExportIndex)
// 导入
index.importIndex("reg", data)
index.importIndex("cfg", data)
index.importIndex("map", data)
index.importIndex("ctx", data)
index.importIndex("oos", data)
约束与限制
在下述版本验证通过:
DevEco Studio: 5.0.3.500
Cangjie support Plugin: 5.0.3.500
鸿蒙全栈开发全新学习指南
总是有很多小伙伴反馈说:鸿蒙开发不知道学习哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点? 为了解决大家这些学习烦恼。在这准备了一份很实用的鸿蒙(HarmonyOS NEXT)学习路线与学习文档给大家用来跟着学习。
针对一些列因素,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。
本路线共分为四个阶段:
第一阶段:鸿蒙初中级开发必备技能
第二阶段:鸿蒙南北双向高工技能基础:gitee.com/MNxiaona/733GH
第三阶段:应用开发中高级就业技术
第四阶段:全网首发-工业级南向设备开发就业技术:gitee.com/MNxiaona/733GH
《鸿蒙 (Harmony OS)开发学习手册》(共计892页)
如何快速入门?
1.基本概念
2.构建第一个ArkTS应用
3.……
开发基础知识:gitee.com/MNxiaona/733GH
1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……
基于ArkTS 开发
1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……
鸿蒙开发面试真题(含参考答案):gitee.com/MNxiaona/733GH
OpenHarmony 开发环境搭建
《OpenHarmony源码解析》:gitee.com/MNxiaona/733GH
搭建开发环境
系统架构分析
- 构建子系统
- 启动流程
- 子系统
- 分布式任务调度子系统
- 分布式通信子系统
- 驱动子系统
- ……
OpenHarmony 设备开发学习手册
项目实战开发教学:gitee.com/MNxiaona/733GH
写在最后
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
- 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:
gitee.com/MNxiaona/733GH