Php 全文搜索功能未按预期工作
我使用了全文搜索功能,但是它没有达到预期效果。 我在search.php文件中有以下代码:Php 全文搜索功能未按预期工作,php,mysql,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_
$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”是我在搜索框中键入的内容。现在举个例子,若我搜索“鸽子密集型”,它会将鸽子抗毛发放在顶部,因为那个在数据库的顶部。
我知道我在两个单独的栏(即品牌和产品名称)上搜索全文功能,这种情况可能会发生。然而,无论如何,我可以用另一种方式,这样,如果搜索与两列匹配,它实际上会对搜索进行更高的排名。基本上是什么样的用户类型,我需要那个东西在搜索结果中排名更高。
任何人都可以给出一些如何实现这一点的想法?您(或其他人)可能仍然对答案感兴趣:
使用布尔模式匹配的Mysql文档:
“它们不会自动按相关性降低的顺序对行进行排序。您可以从前面的查询结果中看到这一点:…”
您应该使用布尔运算来实现您所期望的,因此搜索“Dove-Strength”将返回至少包含两个单词中一个的行(即仅包含Dove的行+仅包含Strength的行+包含两个Dove的行,Strength(以任何顺序)),因为两个单词之间没有运算表示OR操作
这可能不是您期望的结果,因为您可能有兴趣在两个单词之间进行“and”操作,但顺序如何
如果您不介意顺序(即,包含这两个单词的任何行都将包含在结果中,例如“无论什么样的鸽子,无论什么样的鸽子……”),这意味着您应该匹配:
“+鸽+激烈”
在此搜索中,仅包含两个世界中的一个世界的行将不包括在结果中
如果您试图实现严格的搜索,即仅包含此短语“Dove-Strength”的行,则应与“Dove-Strength”匹配
关于排名:
如果您希望获得至少包含“Dove”的所有结果,但如果行中也包含“increase”,则排名更高,那么您应该与'+Dove increase'
希望这对您正在尝试实施的内容有用。看看这一点。也许这会对你有所帮助:他给出了一种不同的方法来实现这一点,让我看看我是否能实现它。我们如何按顺序排列结果如果两个词都找到了,那么就把它们按最上面的一个词的顺序排列。。。等