Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

搜索功能有关问题的探讨

[复制链接]
cpstar 发表于 2012-7-18 00:35:39 | 显示全部楼层 |阅读模式
状态描述,论坛开启了sphinx,主题(threads)分了表(主表、存档表两个,以t0、t1表示),回复(posts)也分了表(主表,1表、2表,以p0、p1、p2表示,这里边还有后话),sphinx对t0、t1、p0、p1、p2都进行了索引,此外还修改了程序,让所有的搜索都导引到sphinx进行搜索

问题出现了,昨天报告了一个拼写问题,解决掉了。然后今天出现的问题是按作者搜索这个问题,仅输入作者而不输入关键词。首先,如果全文模式,source/module/search/search_forum.php的第346行就不能在$srchtxt两边加单引号定界符,添加的结果就是导致搜不出结果,因为sphinx会使用ALL模式去对一个空串和authorid进行搜索,结果就是一无所有;而348行的写法反而能搜索到结果,以为sphinx会开始scan模式进行匹配,这样就会有结果。这个问题你们看应该怎么解决。
我的办法是在之前(345行前)加上判断:if($srchtxt!='') $srchtxt="'".$srchtxt."'";然后346行则去掉定界符的添加。另外我考虑,对标题进行搜索的时候,应该也需要定界符。

此外,我也没有看懂317行到324行写的意义,324行的$sqlsrch之后再也没有使用到,不知为何。

这是问题一,我还遇到了问题二,主要出现在分表这个问题上。状态描述中讲到了主题分了表t0和t1,同时sphinx也索引了。那么还是按作者搜索(案例比较特殊,某作者的帖子全部在存档的t1表中),sphinx返回了若干结果,搜索界面也提示了找到了n条记录,查看数据库common_searchindex里也有相关的ids,可是搜索结果的列表界面却说“没有找到结果”,查找原因,发现还是search_forum.php,问题在166行,从数据库按照tid读结果,而读错了表,应该在t1里边读,程序的写法只是默认去t0读取。所以就出现了虽然找到了n条结果,却仍然显示“没有结果”。
实际上这个问题也比较特殊,我定义的搜索是对所有帖子,t0主表帖和t1存档帖,而搜索定义的却只是在t0主表帖中进行查找,所以这是一个概念的误差,开发组看看这个问题需不需要以及怎么去理解这个问题。反正我这里采取了遍历所有thread表解决了这个问题。最后,想说的是,源头在于有用户说他的帖子不见了,可是查了一下查到了,最终一步一步得到了这么一个情况。另外,这似乎还涉及到一个用户资料统计的问题?复杂了。。。

最后说一下那个后话。分表这个事情,我先分出了t0和t1,然后分了p0、p1、p2,结果发现t0的回帖分布在p0和p1里,t1更分布在p0、p1、p2三个表,当然t1不会再有更新,所以不可能增加回帖数据,而t0在用,回帖却要往p0、p1两个表里insert,有些乱。最后我重新整理了数据,把t0的回帖都放在了p0里,t1的则分到了p1和p2里。这么一个案例,不知道对分表这个操作有没有什么借鉴意义,仅供参考。
m.king 发表于 2012-7-18 15:01:47 | 显示全部楼层
感谢您的反馈,该问题我们再核实下。
回复

使用道具 举报

阆中李炜 发表于 2012-7-18 16:54:31 | 显示全部楼层
学习了。。
回复

使用道具 举报

无效楼层,该帖已经被删除
m.king 发表于 2012-9-13 09:04:35 | 显示全部楼层
全文搜索,不填写关键词没有意义,全文就是针对关键词查询的。

现在的机制是主题存档不参与搜索的,以及其它操作,如果达到要求,需要修改这个机制。

现在的post分表机制,应该是同一个贴内的帖子都在一个分表中,和主题存档表没有关系
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-2-28 06:42 , Processed in 0.025391 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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