列在这个问题上:
MySQL problem - COMPLETE server overrun! Please advise
都是我的服务器详细信息,所以我不必在这里重新编写。
所以我有一个PHP脚本,它与mysql数据库交互。
2天前,由于我的用户提出了很多请求,我已经从clasic“select*from table where column like'blabla'和column like'labab'”切换到了全文搜索。
索引,测试,很好去。
上班2天,已经接到一袋投诉。
搜索确实更好,那就是如果你使用完整的单词。。。:(
尝试搜索“苹果”,你会发现几乎相同的结果。
尝试搜索“低价的苹果电脑”,全文搜索比任何同类搜索都要高得多
尝试搜索“ple”,你会得到一个完整的结果列表与经典的方法。。。但是一个巨大的肥硕的“什么也没找到”的文字躺在你面前与全文搜索。。。
很抱歉,到目前为止这听起来很有诗意。。。:|
有办法解决这个问题吗?让全文使用一些奇怪的通配符?就像%foo%应该给我带来foork,flfoor等等。。。
对于你们这些问我的人来说,是的,除了语法、简单的表达式和基本的函数,我真的不太了解mysql。
请帮助我一个代码片段或链接到某个解决此问题的方法。。。
如果可能的话,我宁愿用一些第三方MySQL搜索引擎来解决我的存在,而不是最后的选择。
非常感谢你提前!
干杯!
对不起,我忘了把密码放上去:
$query="SELECT *,
CASE when title like '%".$s."%' then 1 else 0 END as titlematch,
CASE when tags like '%".$s."%' then 1 else 0 END as tagsmatch,
MATCH (title, tags) AGAINST ('".$s."') AS relevance
FROM videos
WHERE MATCH(title, tags) AGAINST ('".$s."' IN BOOLEAN MODE)
HAVING relevance > 0
ORDER by titlematch desc, tagsmatch desc, relevance desc, `datetime` desc, `views` desc
";
最佳答案
如果您已经在使用布尔模式,那么可以更新PHP代码,以便在AGAINST(...)
中的搜索字符串周围自动添加通配符。这应该可以解决你的单字搜索问题。
在多词搜索的情况下,您也可以在每个单词周围添加通配符,但我建议您使用真实数据(例如,如果您记录了常用的搜索关键字)进行一些测试,以确保当前结果的相关性不受影响。
更新:尝试以下操作:
SELECT
*,
CASE when title like '%".$s."%' then 1 else 0 END as titlematch,
CASE when tags like '%".$s."%' then 1 else 0 END as tagsmatch,
MATCH (title, tags) AGAINST ('*".$s."*' IN BOOLEAN MODE) AS relevance
FROM videos
WHERE
title like '%".$s."%' OR
tags like '%".$s."%' OR
MATCH (title, tags) AGAINST ('*".$s."*' IN BOOLEAN MODE)
ORDER by
titlematch desc, tagsmatch desc, relevance desc
关于php - mysql和php FULLTEXT搜索可做更多,但不会少吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6472688/