全文搜索结果显示最重复的单词

时间:2016-02-08 19:23:13

标签: php mysql full-text-search

我插入了我的网络浏览器并且效果很好,但它显示了凌乱的结果,我想在顶部向我显示搜索中的单词或单词重复。

我查看了在线教程,但我不能这样做,总是弄乱,不明白为什么。

现在我有这样的话:

$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搜索的信息不多。看看专家是否来到这里,所以我们都学习。

如何优化搜索?谢谢。

1 个答案:

答案 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中的自由文本有很多怪癖,但玩起来,你会得到它的窍门。