2017-07-26 40 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()列表中所列列中該行中的文本之間的相似性度量。