全文搜索结果显示重复次数最多的单词
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 中的自由文本有很多怪癖,但只要尝试一下,您就会掌握窍门。
我插入了我的网络浏览器,效果很好,但它显示的结果很乱,我想在顶部显示搜索中重复的单词。
看了网上的教程,做不到,总是乱七八糟的,不明白为什么。
现在我是这样的:
$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 中的自由文本有很多怪癖,但只要尝试一下,您就会掌握窍门。