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

fulltext search results showing where most repeated words

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

看了网上的教程,做不到,总是乱七八糟的,不明白为什么。

现在我是这样的:

$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";

Internet 上没有太多关于优化或优化 Mysql FULLTEXT 搜索的信息。看看有没有高手过来一起学习。

如何优化您的搜索?谢谢。

我认为问题在于您按 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

顺便说一句:对 'your term' 部分使用准备好的语句。

如果您的搜索字符串有空格但每个词都很重要,您需要将它们视为单独的部分。因此,如果同时拥有 "Mercedes" 和 "Benz" 很重要:

  • 不要:AGAINST ('Mercedes Benz' IN BOOLEAN MODE) <--- 这意味着梅赛德斯 奔驰
  • 做: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。我认为你的最终查询应该看起来像这样 "Mercedes Benz"

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 中的自由文本有很多怪癖,但只要尝试一下,您就会掌握窍门。