高性能搜索引擎sphinx源码解析之搜索过程和评分公式

本文深入解析Sphinx搜索引擎的搜索逻辑,包括分词、DocID获取、Disk chunk处理及权重算法。重点介绍了BM25评分公式在Sphinx中的应用,展示了如何计算文档的权重和相似度。
摘要由CSDN通过智能技术生成

 

技术交流qq群: 659201069

 

**鄙人的新书《elasticsearch7完全开发指南》,欢迎订阅!**
-----
https://wenku.baidu.com/view/8ff2ce94591b6bd97f192279168884868762b8e7

《kibana权威指南》
----
https://wenku.baidu.com/view/24cfee1ce43a580216fc700abb68a98270feac21

 

sphinx搜索(select)逻辑

 

用输入的查询词在索引文件中挨个进行比较,找到满足关系的文档的过程,并读出文档,给每个文件打分,最后打分完成后进行排序,随后获取到排序后的文档列表的过程。

 

sphinx搜索过程包括以下步骤

1)        搜收用户输入,并存储,存储格式CsphString,字符串形式,例如select id,weight() ,list_namefrom LISTING wherematch('金');

2)        解析用户输入,解析完成后每条语句以SqlStmt_t格式存储

下面对SqlStmt_t作出简要分析

 

3)        SqlStmt_t结构成员CsphQuery,此类存储着查询所需的所有信息

示意图如下,全部成员见类图,下图只给出主成员

 

4)        根据SqlStmt_t结构中命令动词,来匹配不同的程序分支,这里只分析select流程

5)        pLocalSorter =sphCreateQueue( tQueueSettings );创建优先级队列,用于对结果排序,默认以weight排序,weight越大在队列中的优先级越高,按照优先级依次出队就完成了排序

6)        得到ram chunk 和disk chunk的指针,创建分词器

7)        对搜索字符串进行分词,分词结束后语法树逻辑结构如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿童木-atom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值