用 js 撸了一个嵌入式的搜索引擎

2020-04-13 17:26:14 +08:00
 yuankui
目前个人打算用于 electron 做的知识管理软件的文章搜索。

主要基于
1. rocksDB
2. roaring(bitmap)
3. jiebanode(分词)
4. rxjs


https://github.com/yuankui/loosenjs
(Lucene 谐音,我是不是很无耻。。)

目前还在开发中,但是架子基本完成。

1. 支持全文搜索
2. 支持整数的过滤,排序
3. 高度可扩展(有兴趣自己看代码)


在开发之前,我也调研过其他的库。比如
lunr:大致看了下,他好像全是基于内存的,序列化保存到磁盘的成本有点?相比之下,loosenjs 是基于 rocksdb,磁盘+内存,支持增量更新。

不知道大家有兴趣,如果有兴趣,我后面可以准备写一个系列文章,来介绍下原理和该库的正确打开方式。
2765 次点击
所在节点    程序员
13 条回复
freshgoose
2020-04-13 17:27:56 +08:00
我觉得,起码得有个演示吧……光听你说实在没啥直观的感受。
aloo
2020-04-13 17:34:24 +08:00
先 Star 为敬
zhuangzhuang1988
2020-04-13 17:35:32 +08:00
yuankui
2020-04-13 17:53:28 +08:00
yuankui
2020-04-13 17:55:59 +08:00
@zhuangzhuang1988 我研究下,感谢
yuankui
2020-04-13 17:57:15 +08:00
@aloo 我就喜欢老哥这样的人
icu996
2020-04-13 18:47:27 +08:00
query 改写怎么玩耍的呢,顺便问句是只有倒排召回么
yuankui
2020-04-13 18:57:43 +08:00
@icu996

> query 改写怎么玩耍的呢
这个挺好支持的。
后面可以在这里加个 query-rewrite 的 hook 。然后用户就可以自己插入 query 改写的逻辑了。
https://github.com/yuankui/loosenjs/blob/master/src/hooks/field-types/text-type/TextField.ts#L81

> 顺便问句是只有倒排召回么
支持正排过滤,如果没有设置 query,就召回全部 doc-list,然后根据正排进行过滤,分页。
icu996
2020-04-14 10:51:10 +08:00
@yuankui 召回这里也许可以添加其他维度的召回逻辑,比如 faiss 召回、精准召回等等,这样几种召回逻辑可以互为补充,提升召回结果;
yuankui
2020-04-14 11:19:35 +08:00
@icu996 遇到大佬了,感谢大佬指点。
我其实没搞过搜索引擎,faiss,精准召回都没听过,回头看下相关资料。
我理解可以把找召回我单独抽象成一个接口,然后运行时根据参数,动态选择一个合适的召回实现,然后进行召回。
yuankui
2020-04-14 11:19:44 +08:00
@icu996 后续完善下这块
cherryas
2020-04-14 15:24:13 +08:00
mark 半年后再来看
yuankui
2020-04-14 16:18:18 +08:00
@cherryas 有更新了 通知你

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/662029

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX