繁体   English   中英

匹配…反对没有得出确切的结果

[英]MATCH … AGAINST doesn't come up with exact results

我第一次使用MATCH ... AGAINST在php sql中工作,但是有一个困扰我,我不知道该如何解决。 这是我的代码:

SELECT * FROM m_artist WHERE match(artist_name) against('". $_POST['article_content'] ."' IN BOOLEAN MODE)

这是$_POST['article_content']:

Wildstylez Brothers Yeah Frontliner Waveliner

现在我的输出应该是:Wildstylez,Frontliner和Waveliner,原因在我的数据库中。 除了这样做,我还得到了伏特加兄弟,Hardstyle的2个兄弟以及更多的原因。 如何解决SQL仅选择文字匹配的问题?

全文搜索实际上是一个颇具误导性的名称:您可以通过查询来搜索全文(就像google一样),但这不能保证您,全文等于您的查询。

因此,根据有关布尔全文本搜索的文档,您的输入Wildstylez Brothers Yeah Frontliner Waveliner被解释为artist_name包含(至少) WildstylezBrothersYeahFrontlinerWaveliner 这就是为什么您得到the Vodka Brothers ,其中包括Brothers 出于类似于Google的目的,这就是您想要的,因为您想获得一些您仅了解的东西的详细信息,如向我展示music文章。

您可能要使用

artist_name LIKE '%name_part1%' OR artist_name LIKE '%name_part2%' ...

要么

artist_name IN ('exact_name1', 'exact_name2', ...)

最简单的情况是做类似

$names = explode(' ', $_POST['article_content']);
$name_searches = array_map(function($a) {return 'artist_name = \''.mysql_real_escape_string($a).'\'';}, $names);
$sql = "SELECT * FROM m_artist WHERE ".implode(" OR ", $name_searches);

但是您会失去找到2 Brothers of Hardstyle因为名称本身包含空格。

另一种方法是在所有单词前面加上“ +”作为前缀,并坚持MATCH() AGAINST()然后您会发现只有包含每个给定单词的艺术家。

如果这不是您想要的内容,请提供更多背景信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM