介绍
FlexSearch 是一个快速、零依赖的全文搜索库。 在原始搜索速度方面,FlexSearch 优于每一个搜索库, 并提供灵活的搜索功能,如多字段搜索,语音转换或部分匹配。根据使用的选项,它还提供最高内存效率的索引。 FlexSearch 引入了一种新的评分算法,称为"上下文索引",基于预先评分的词典字典体系结构,与其他库相比,实际执行的查询速度有大幅度提高。 FlexSearch 还为您提供非阻塞异步处理模型,以通过专用平衡线程并行地对索引执行任何更新或查询。
特性
- 🚀 支持多种语系编码场景
- 🚀 支持配置多种初始化选项
- 🚀 支持 Index 索引、Document 多字段索引搜索
源码目录
shell
├── 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"
cj
{
"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"}
cj
[dependencies]
flexsearch = {path = "../../../../flexsearch/src/main/cangjie", version = "1.0.0"}
- 在项目中使用 import flexsearch.* 引用flexsearch项目
cj
import flexsearch.*
DD一下: 欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。
erlang
`欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。`
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案)
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......
功能示例
document 多字段索引
cj
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 索引
cj
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)
约束与限制
在下述版本验证通过:
cj
DevEco Studio: 5.0.3.500
Cangjie support Plugin: 5.0.3.500