Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 全文搜索功能未按预期工作_Php_Mysql - Fatal编程技术网

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_

我使用了全文搜索功能,但是它没有达到预期效果。 我在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”是我在搜索框中键入的内容。现在举个例子,若我搜索“鸽子密集型”,它会将鸽子抗毛发放在顶部,因为那个在数据库的顶部。 我知道我在两个单独的栏(即品牌和产品名称)上搜索全文功能,这种情况可能会发生。然而,无论如何,我可以用另一种方式,这样,如果搜索与两列匹配,它实际上会对搜索进行更高的排名。基本上是什么样的用户类型,我需要那个东西在搜索结果中排名更高。 任何人都可以给出一些如何实现这一点的想法?

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

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

您应该使用布尔运算来实现您所期望的,因此搜索“Dove-Strength”将返回至少包含两个单词中一个的行(即仅包含Dove的行+仅包含Strength的行+包含两个Dove的行,Strength(以任何顺序)),因为两个单词之间没有运算表示OR操作

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

如果您不介意顺序(即,包含这两个单词的任何行都将包含在结果中,例如“无论什么样的鸽子,无论什么样的鸽子……”),这意味着您应该匹配:

“+鸽+激烈” 在此搜索中,仅包含两个世界中的一个世界的行将不包括在结果中

如果您试图实现严格的搜索,即仅包含此短语“Dove-Strength”的行,则应与“Dove-Strength”匹配

关于排名:

如果您希望获得至少包含“Dove”的所有结果,但如果行中也包含“increase”,则排名更高,那么您应该与'+Dove increase'


希望这对您正在尝试实施的内容有用。

看看这一点。也许这会对你有所帮助:他给出了一种不同的方法来实现这一点,让我看看我是否能实现它。我们如何按顺序排列结果如果两个词都找到了,那么就把它们按最上面的一个词的顺序排列。。。等