全文mysql搜索并匹配完全字符串

时间:2016-11-30 10:52:01

标签: php mysql full-text-search

好的,这是我在阅读的灰色问题,并通过mysql查看各种选项,我只能认为它是如此明显,我只是失明。

简而言之,我正在创建一个标签云,部分过程是验证该单词是否存在,如果是+1,但它必须是确切的短语。

所以我认为全文搜索是最好的选择。

以此为例。

$string = "hair dryer";

$string = '"'.$string.'"'; //enclose string in quotation marks to define must be an exact match



 //$string = mysqli_real_escape_string($mysqli,$string); // removed to see if this was effecting the result.

 $sql = "SELECT * FROM `search_keyword` WHERE Match (`keyword`) Against ('$string' IN BOOLEAN MODE) LIMIT 1";
 $result=mysqli_query($mysqli,$sql);

所以测试是在DB我有一个单词“吹风机”,它匹配它 - 好结果

然而,如果我将字符串更改为“hair”,它仍会拉出“吹风机”,它不应该做,因为它不是完全匹配。

我已经阅读了所有这些以及我尝试过的每一种方式都得到了错误的结果。

(
[0] => Array
    (
        [keyword] => hair dryer
        [id] => 25
    )

 )  /// should be empty and hair as a single row is not found

欢迎任何建议: - )

1 个答案:

答案 0 :(得分:0)

你可以用php做到这一点。首先将您的字符串转换为数组,然后比较两个数组以查看是否匹配。

      $string = explode(" ",$string); 
      $sql = "SELECT keyword FROM search_keyword";
     $result=mysqli_query($mysqli,$sql);
$compareArrays = array_intersect($result,$string);
       if (is_array($compareArrays) && count($compareArrays) > 0) {

对结果做一些事情,好像$ compareArrays比一个更好,这意味着你有完全匹配。 array_intersect比较2个arrray以查看是否存在完全匹配。这样我就不会认为你会与头发相匹配。作为一个字符串,但你会得到一个带吹风机的#39;这有用吗?