技术交流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) 对搜索字符串进行分词,分词结束后语法树逻辑结构如下