在DB中使用拆分文本进行搜索并获得重新命中的值

时间:2017-07-26 07:58:32

标签: php sql database algorithm

我想在搜索查询中通过拆分数组从DB中获取最匹配的数据 想象一下我的疑问是:“如何购买摩托车”&在DB中我已经获得了一些像

这样的数据
  1. 买直升机

  2. 买一辆摩托车

  3. 买车

  4. 因此,在拆分查询后,它会搜索到DB “how”“to”“buy”“摩托车”恭敬地。使用这些子字符串,查询仅在输出中生成“购买直升机”字符串。但我想购买摩托车数据。我生成了一个方法,但它只在任何这些子字符串与DB中的相同数据匹配时才编码数据。 这是我的代码,只获取第一个匹配的数据,但我想要的数据是否为。 2。

    $str=$_POST['search']; 
    $str=preg_split("/[\s]+/",  $str);
    foreach ($str as $search ) {
    $sql = "SELECT answer FROM query_tbl WHERE q1 like  '%".$search."%' ";
    $record = mysqli_query($link, $sql);
    $rows=mysqli_fetch_assoc($record);
      if ($rows == true) {
         echo  json_encode(array('ans'=>$rows['answer']));
        } 
    }
    

    那么,我应该遵循哪种算法以及在何处使用它来实现我的目标?

1 个答案:

答案 0 :(得分:0)

我认为最好按照here所述进行全文搜索。

  

默认情况下或使用IN NATURAL LANGUAGE MODE修饰符,MATCH()函数对文本集合执行字符串的自然语言搜索。集合是FULLTEXT索引中包含的一个或多个列的集合。搜索字符串作为AGAINST()的参数给出。对于表中的每一行,MATCH()返回一个相关值;也就是说,搜索字符串与MATCH()列表中指定的列中该行中的文本之间的相似性度量。