开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1994|回复: 112
收起左侧

[易源码分享] 更新:快雪(RapidSonw)搜索引擎,搜30万条文章秒出/倒排索引/BM25

[复制链接]
结帖率:100% (6/6)
发表于 2025-3-3 21:00:16 | 显示全部楼层 |阅读模式   天津市天津市
分享源码
界面截图: -
是否带模块: -
备注说明: -

RapidSonw


简单介绍

快雪(RapidSonw)是一个文档搜索引擎,以文档而建立的数据库,检索与用户查询条件匹配的相关记录,然后按一定的排列顺序将结果返回给用户。其特点是能对海量的数据进行有效管理和快速检索。

引用项目

名称 传送门
Jieba NLP自然语言处理结巴(Jieba)分词组件封装开源
RocksDB rocksdb 数据库模块1.7 解锁超多功能!自带哈希hash

特点

  • 使用简单,你只需要考虑往里加和往外拿。
  • 动态参数,可以随意添加多个参数并且支持不同的数据类型。
  • 搜索快速,从头条加入的30万条新闻文章,搜索关键词瞬间取出全部相关结果。
  • 停词筛选,过滤无意义词汇减少资源占用。
  • 结果排序,使用BM25(BestMatching25)检索算法,根据搜索词与搜索结果的相关度进行排序。

主要功能

  • 构建表用来管理数据库中的内容。

    添加() 向数据库内添加一个新的文档
    删除() 根据标题删除对应的文档
    取标题() 根据索引ID取出对应的文档标题
    取参数() 取出当前文档的子数据
    取全部参数() 取当前文档的所有子数据参数名
    取全部索引() 取出数据库中的所有文档索引

  • 查询表 快速检索数据库中的内容。

    搜索 通过关键词搜索相关文档
    取参数() 取出当前文档的子数据
    取全部参数() 取当前文档的所有子数据参数名

  • 停词表 管理数据库中的停用词。

    添加() 添加一个停用词
    删除() 删除一个停用词
    取数量() 获取数据库中的停用词总数
    取出所有() 取出数据库中所有的停用词

  • 参数集 以参数的形式管理每个文档所携带的子数据。

    文本型() 添加或取出文本型参数
    整数型() 添加或取出整数型参数
    小数型() 添加或取出小数型参数
    逻辑型() 添加或取出逻辑型参数
    长整数() 添加或取出长整数型参数
    字节集() 添加或取出字节集型参数
    删除参数() 删除已添加的参数

文件说明

Demo.Build.e 是数据库构建例子源码。
Demo.Search.e 是搜索例子源码。
Ec.RapidSonw.e 是快雪模块源码。
Ec.RapidSonw.ec 是快雪模块文件。
toutiao_cat_data_lite.txt 是5000个新闻的标题,给构建例子源码使用。

基本原理

倒排索引

倒排索引的基本原理是将文档集合中的每个词都映射到出现该词的文档列表,而不是将文档映射到词的列表。实现倒排索引的步骤包括文档分词、构建索引表和优化索引。

文本分析和标准化处理

在建立索引和搜索时,对文本进行分析和标准化处理。文本分析包括分词,将输入的文本数据划分为一个个的词。标准化处理包括小写转换、去除停用词、词干提取和同义词扩展。这些步骤有助于提高搜索的准确性和效果。

多个词查询

将要查询的字符串分词,分成多个关键词,根据关键词返回倒排表,再根据逻辑条件(且或非)整合倒排表。

  • 且:多个倒排表直接做交集运算
  • 或:并集运算
  • 非:差集运算

数据分段

搞定了索引之后,再来看看数据是怎么存储的,试想一下如果所有数据(新华字典中所有的字)都存在一个文件中,如果数据有更新或者删除(比如新增加一个字或者删除一个字),那么所有的索引都需要全量重新创建,这种方式在数据量很大时效率很。
所以这里引入了子参数数据的概念,以参数的方式将同一文档下的不同数据分开储存。

搜索结果根据相关度排序

BM25(Best Match 25)是一种常用于搜索引擎中的文本检索算法,也是Lucene搜索引擎中常用的算法之一。它是根据文档和查询之间的关系来评估文档的相关性,并根据相关性进行排序。
BM25算法的核心思想是使用统计学原理来计算文档和查询之间的相关性。它考虑了文档中各个词项的权重、查询词频、文档长度等因素,通过计算一个分数来衡量文档和查询之间的相关性。
具体来说,BM25算法中的评分公式如下:

score(D,Q) = ∑((IDF(q) * tf(q, D) * (k1 + 1)) / (tf(q, D) + k1 * (1 - b + b * (|D| / avgdl))))

其中,D表示文档,Q表示查询,q表示查询中的一个词项,tf(q, D)表示词项q在文档D中的频率,k1和b是调节参数,IDF(q)表示词项q的逆文档频率,avgdl表示平均文档长度。
BM25算法通过计算每个文档和查询之间的得分,然后根据得分对文档进行排序,以便返回相关性较高的文档。它考虑了词项的权重、词频以及文档长度等因素,能够有效地提高搜索的准确性和相关性。

更新日志

  • 1.0.1版本3月2日发布
    ·这个版本有严重BUG,暂时锁帖24小时。
  • 1.0.2版本3月3日更新
    ·修复加载词库报错
    ·去除字典文件设置,改为自带字典并与DLL库一同写出
    ·去除Demo.Build.e的 输出调试文本()命令,以优化演示流畅性。

项目下载


游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 23好评 +3 精币 +28 收起 理由
3266167 + 1 感谢分享,很给力!~
gytxtx + 1 + 2 开源精神必须支持~
jc520hll + 1 感谢分享,很给力!~
t176 + 1 感谢分享,很给力!~
cbl521ysys + 1 感谢分享,很给力!~
无尘666 + 1 感谢分享,很给力!~
huangdi9569 + 1 感谢分享,很给力!~
zjbin1989 + 1 感谢分享,很给力!~
文西哥 + 1 感谢分享,很给力!~
望尘莫及 + 1 感谢分享,很给力!~
黯丄辶 + 1 感谢分享,很给力!~
暮光之城 + 1 感谢分享,很给力!~
hackjoe + 1 感谢分享,很给力!~
风雨3137 + 1 感谢分享,很给力!~
sundanming + 1 感谢分享,很给力!~
pcghr355 + 1 感谢分享,很给力!~
初阳123 + 1 感谢分享,很给力!~
Zźh926 + 1 感谢分享,很给力!~
huangdi956 + 1 感谢分享,很给力!~
明天自然醒 + 1 + 3 排版真舒服
z134 + 1 感谢分享,很给力!~
ma4747 + 1 感谢分享,很给力!~
qq1056123185 + 1 + 3 这开源帖的排版格式真正规,爱了爱了~

查看全部评分


本帖被以下淘专辑推荐:

结帖率:100% (47/47)

签到天数: 27 天

发表于 2025-3-21 12:09:18 | 显示全部楼层   江西省南昌市
·修复加载词库报错
·去除字典文件设置,改为自带字典并与DLL库一同写出
·去除Demo.Build.e的 输出调试文本()命令,以优化演示流畅性。
回复 支持 反对

使用道具 举报

结帖率:33% (1/3)

签到天数: 7 天

发表于 2025-3-16 22:31:15 | 显示全部楼层   宁夏回族自治区银川市
感谢楼主分享
回复 支持 反对

使用道具 举报

签到天数: 5 天

发表于 2025-3-15 04:20:08 | 显示全部楼层   河北省保定市
开源精神必须支持~
回复 支持 反对

使用道具 举报

签到天数: 11 天

发表于 2025-3-11 19:50:10 | 显示全部楼层   河南省平顶山市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:44% (4/9)

签到天数: 2 天

发表于 2025-3-11 03:36:58 | 显示全部楼层   河南省郑州市
什么意思
回复 支持 反对

使用道具 举报

签到天数: 23 天

发表于 2025-3-10 23:09:06 | 显示全部楼层   广东省揭阳市
这个版本有严重BUG,暂时锁帖24小时。
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 5 天

发表于 2025-3-10 18:41:12 | 显示全部楼层   山东省青岛市
66666666666666666
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)

签到天数: 27 天

发表于 2025-3-10 14:18:31 | 显示全部楼层   江苏省苏州市
谢谢分享
回复 支持 反对

使用道具 举报

结帖率:60% (3/5)

签到天数: 19 天

发表于 2025-3-10 14:12:14 | 显示全部楼层   广东省深圳市
刚刚回复了啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表