2016-11-30 104 views
0

好吧,這是做我的灰色問題在我讀過,並通過MySQL,並看了各種選項,我只能認爲它是如此明顯,我只是失明。全文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我有詞「吹風機」一條線,它匹配了 - 好的結果

如果我改變字符串但是「頭髮」它仍然翻出「吹風機」,它不應該做它不完全匹配。

我已經讀完了所有的方法,我嘗試這個我得到了錯誤的結果。

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

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

請任何的建議是歡迎:-)

+0

那麼爲什麼不''SELECT count(*)FROM ... WHERE Keyword = $ string'。如果你只想要一個特定的匹配。 – Mruf

+0

是的,它可以使用該方法,但是由於某些原因,每隔一段時間它就無法拾取現有單詞,並且在不應該添加另一個單詞的情況下又添加了另一個單詞。所以我認爲,如果我使用全文,我會得到一個更準確的方法,而不是創建重複。我很困惑,爲什麼它看起來很難讓查詢只提取完全匹配。 –

+0

如果我正確理解你的問題全文搜索不是正確的方向,因爲全文創建倒排索引,即使你將限制字符限制爲1,那麼'頭髮'將匹配'吹風機'。 您需要像處理您的關鍵字之前處理您的關鍵字像修剪之前,strtolower然後使用以下查詢SELECT count(*)FROM ... WHERE Keyword = trim($ string)或關鍵字字段上的組查詢。 –

回答

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是greter不止一個,這意味着你必須完全匹配。 array_intersect比較2個數組以查看是否有完全匹配。這樣我不認爲你會得到一個'頭髮'作爲一個字符串的匹配,但你會得到一個'吹風機'。這是否工作?