全文搜索功能无法按预期工作

时间:2014-03-02 14:28:20

标签: php mysql

我使用了全文搜索功能,但它没有达到预期效果。 我在search.php文件中跟随代码:

$kws = $_POST['kw'];
$kws = mysql_real_escape_string($kws); 
$query = "SELECT * FROM products WHERE MATCH (product_name,brand,short_desc)
          AGAINST ('*".$kws."*' IN BOOLEAN MODE) limit 14" ;
$res_old = mysql_query($query);

'kw'是我在搜索框中输入的内容。现在举个例子,如果我搜索'Dove Intense',它会把Dove Antihairfall放在首位,因为它在数据库中排在首位。 我知道我正在通过两个单独的列搜索全文功能,即品牌和版本。 product_name,这种情况可能发生。然而,无论如何我可以反过来这样,如果它与两个列匹配,它实际上将搜索排名更高。基本上用户输入的内容,我需要在搜索结果中排名更高的东西。 任何人都可以知道如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

您(或其他人)可能仍然对答案感兴趣:

从Mysql文档中匹配使用布尔模式: “它们不会按相关性降低的顺序自动对行进行排序。您可以从前面的查询结果中看到这一点:...”CheckThis

你应该使用布尔运算来实现你所期望的,所以搜索'Dove Intense'会返回包含两个单词中至少一个的行(即只有Dove的行+只有Intense的行+只有两行的行)鸽子,强烈(以任何顺序)),仅仅因为两个单词之间没有操作表示OR操作!

这可能不是您期望的结果,因为您可能有兴趣在两个单词之间进行“和”操作,但顺序呢?

如果你不介意顺序(即任何包含两个单词的行都将包含在结果中。'强烈无论什么鸽子......')这意味着你应该匹配:

'+ Dove + Intense' 在此搜索中,仅包含两个世界之一的行将不包含在结果中。

如果您正在尝试实施严格的搜索,即。只有包含此词组“Dove Intense”的行应与'“Dove Intense”相匹配

现在关于排名:

如果您想获得至少具有“Dove”的所有结果,但如果它们也包含“Intense”,则排名更高,那么您应该匹配'+ Dove Intense'

希望这对您尝试实施的内容非常有用。