一个golang实现的全文检索引擎,支持亿级数据,毫秒级查询

2022-05-18 13:10:09 浏览数 (1)

一、开源项目简介

GoFound 是一个golang实现的全文检索引擎 基于平衡二叉树 正排索引、倒排索引实现 可支持亿级数据,毫秒级查询。使用简单,使用http接口,任何系统都可以使用。

二、开源协议

使用Apache-2.0开源协议

三、界面展示

管理界面

服务器监控:

暗色模式:

四、功能概述

支持Windows、Linux、macOS、(amd64和arm64)和苹果M1 处理器

和ES比较

ES

GoFound

支持持久化

支持持久化

基于内存索引

基于磁盘 内存缓存

需要安装JDK

原生二进制,无外部依赖

需要安装第三方分词插件

自带中文分词和词库

默认没有可视化管理界面

自带可视化管理界面

内存占用大

基于Golang原生可执行文件,内存非常小

配置复杂

默认可以不加任何参数启动,并且提供少量配置

五、技术选型

技术栈

  • 平衡二叉查找树
  • 二分法查找
  • 快速排序法
  • 倒排索引
  • 正排索引
  • 文件分片
  • golang-jieba分词
  • leveldb

为何要用golang实现一个全文检索引擎?

  • 正如其名,GoFound去探索全文检索的世界,一个小巧精悍的全文检索引擎,支持持久化和单机亿级数据毫秒级查找。
  • 传统的项目大多数会采用ElasticSearch来做全文检索,因为ElasticSearch够成熟,社区活跃、资料完善。缺点就是配置繁琐、基于JVM对内存消耗比较大。
  • 所以我们需要一个更高效的搜索引擎,而又不会消耗太多的内存。以最低的内存达到全文检索的目的,相比ElasticSearch,gofound是原生编译,会减少系统资源的消耗。而且对外无任何依赖。

安装和启动

下载好源码之后,进入到源码目录,执行下列两个命令

  • 编译

直接下载 可执行文件 可以不用编译,省去这一步。

代码语言:javascript复制
go get && go build
  • 启动
代码语言:javascript复制
./gofound --addr=:8080 --data=./data
  • docker部署
代码语言:javascript复制
docker build -t gofound .
docker run -d --name gofound -p 5678:5678 -v /mnt/data/gofound:/usr/local/go_found/data gofound:latest
  • 其他命令 参考 配置文档

多语言SDK

使用gofound的多语言SDK,可以在不同语言中使用gofound。但是请注意,版本号与gofound需要一致。主版本和子版本号,修订版不一致不影响。

Java

Python

Node.js

其他语言的SDK,正在陆续完善中。也可以直接通过API文档用HTTP请求实现。

索引原理和流程

gofound 采用平衡二叉树对文本关键词进行索引,然后利用leveldb存储id值,以及对应的文档。

原理图

二叉平衡查找树

二叉平衡查找树是一个高效的查找树,它的查找速度是O(log n),并且每个节点的子树都是平衡的。 gofound默认是分10个文件块,也就是10个平衡查找树,每个平衡查找树的深度是log10(n)。

1亿条索引在一颗树查找最大26次,如果10亿数据,最大查找也是26次,会根据key的hash值取模shard数量,来找到对应的索引进行检索。

来源:

https://www.toutiao.com/article/7097614973505028623/?log_from=804a8e453e95e_1652665811429

“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com

来都来了,走啥走,留个言呗~

 IT大咖说  |  关于版权

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!

  • 相关推荐
  • 推荐文章
  • 跨系统数据一致性问题经验实战
  • 还在用Alpine做Docker镜像?看看大牛怎么说
  • 掌握mysql的这些操作,让你事半功倍
  • SpringBoot 监控 SQL 运行情况?
  • [开源]仅数MB,准确率99.9%的离线IP地址定位库,0.0x毫秒级查询
  • SecureCRT 9.2 和 SecureFX 9.2 正式版现已推出
  • 跟xshell说再见,推荐免费的终端连接器WindTerm
  • ICLR 2022 | 走向深度图神经网络:基于GNTK的优化视角
  • 不会还有人不懂Stream源码吧?10年架构师带你一次性搞懂
  • 2 万字详解,彻底讲透 Elasticsearch

0 人点赞