简单介绍
快雪(RapidSonw)是一个文档搜索引擎,以文档而建立的数据库,检索与用户查询条件匹配的相关记录,然后按一定的排列顺序将结果返回给用户。其特点是能对海量的数据进行有效管理和快速检索。
引用项目
特点
使用简单,你只需要考虑往里加和往外拿。
动态参数,可以随意添加多个参数并且支持不同的数据类型。
搜索快速,从头条加入的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算法通过计算每个文档和查询之间的得分,然后根据得分对文档进行排序,以便返回相关性较高的文档。它考虑了词项的权重、词频以及文档长度等因素,能够有效地提高搜索的准确性和相关性。
更新日志
项目下载