2017-07-26 62 views
0

我想通过分割数组在搜索查询中从数据库中获得最匹配的数据。
想象一下,我的查询是:“如何购买一辆摩托车” &在DB我录用了一些数据,如用分割文本搜索数据库并获得重新值

  1. 买直升机

  2. 买一辆摩托车

  3. 团购一辆车

因此,在拆分查询之后,它将分别搜索到“how”,“到”,“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'])); 
    } 
} 

那么,我应该遵循哪种算法,并在哪里使用它来实现我的目标?

回答

0

我认为最好是按照here的描述进行全文检索。

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