我插入了我的网络浏览器并且效果很好,但它显示了凌乱的结果,我想在顶部向我显示搜索中的单词或单词重复。
我查看了在线教程,但我不能这样做,总是弄乱,不明白为什么。
现在我有这样的话:
$sql="SELECT art,tit,tem,cred,info,que,ano,url
FROM contenido
WHERE MATCH (art,tit,tem,cred,info)
AGAINST ('" .$busqueda. "' IN BOOLEAN MODE)
ORDER BY id DESC";
互联网上关于改进或优化Mysql FULLTEXT搜索的信息不多。看看专家是否来到这里,所以我们都学习。
如何优化搜索?谢谢。
答案 0 :(得分:1)
我认为问题在于您按id
排序。
全文按其计算的匹配分数排序,首先显示更强的匹配。当您应用ORDER BY id DESC
时,您将失去这种按比特排序的顺序。
如果需要,您可以在结果集中查看实际分数:
SELECT art,tit,tem,cred,info,que,ano,url,
MATCH (art,tit,tem,cred,info)
AGAINST ('your term' IN BOOLEAN MODE) AS score
FROM contenido
WHERE MATCH (art,tit,tem,cred,info)
AGAINST ('your term' IN BOOLEAN MODE)
ORDER BY id DESC
BTW:为'你的术语'部分使用预备语句。
如果您的搜索字符串包含空格但每个术语都很重要,则需要将它们视为单独的部分。因此,如果同时拥有“梅赛德斯”和“奔驰”很重要:
AGAINST ('Mercedes Benz' IN BOOLEAN MODE)
< ---这意味着Mercedes 或 Benz AGAINST ('+Mercedes +Benz' IN BOOLEAN MODE)
如果你想拥有必须拥有第一个任期的任何东西,但可选择第二个任期(当两个任期都排名更高时):
AGAINST ('+Mercedes Benz' IN BOOLEAN MODE)
以下是一长串组合:https://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html
不要忘记,摆脱ORDER BY id DESC
。我认为你的最终查询对于“梅赛德斯奔驰”来说应该是这样的。
SELECT art,tit,tem,cred,info,que,ano,url
FROM contenido
WHERE MATCH (art,tit,tem,cred,info)
AGAINST ('+Mercedes Benz' IN BOOLEAN MODE);
是的,MySQL中的自由文本有很多怪癖,但玩起来,你会得到它的窍门。