簡體   English   中英

如何使用 MySQL MATCH AGAINST IN BOOLEAN MODE 返回關鍵字字符串中至少 1 個匹配關鍵字的結果?

[英]How to use MySQL MATCH AGAINST IN BOOLEAN MODE to return results for at least 1 matching keyword inside a keywords string?

我有這個查詢,用於根據在搜索框中輸入的關鍵字搜索數據庫條目。

// function to get search keywords from url
$q = furl($_GET['q']);

$sExp = preg_split('/\s+/',$q); 
$secure_keywords = array(); 
foreach ($sExp as $key=>$keyword){
    if (strlen($keyword) >= 3){ 
    // cut off words that are less than 3 chars
    $secure_keywords[] = $keyword;
    }
}
$kwords = count($secure_keywords); 
foreach ($secure_keywords as $key=>$keyword) 
{ 
// function to prevent sql injection
$keyword = sql_proof($keyword); 

$query="SELECT * FROM listings WHERE MATCH (meta_keywords) AGAINST ('$keyword' IN BOOLEAN MODE) ORDER BY id"; 
} 

當使用 2 個或更多單詞時,如果至少有 1 個單詞拼寫錯誤,則查詢將不會返回任何結果(即使輸入的關鍵字中的其余單詞確實存在結果)。 例如,我輸入“good”這個詞,我至少得到 1 個結果,但是如果我使用“good point”,查詢不會返回任何結果,因此它完全忽略了“good”這個詞的匹配結果。 如果輸入的關鍵字中至少有 1 個匹配詞,查詢是否可以匹配結果? 謝謝

而不是使用“在布爾模式”嘗試

SELECT * FROM articles WHERE MATCH (title, body) AGAINST ('database test')

即使在數據庫之后沒有像“test”這樣的詞,它也會返回結果

SELECT * FROM tablename WHERE MATCH (col1, col2) AGAINST ('string to be searched')

查看以下解決方案,了解將結果與使用的任何關鍵字進行匹配的方法。 另請查看文檔以獲取有關運算符和布爾 fst 的更多信息http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html

// function to get search keywords from url
$q = furl($_GET['q']);

$sExp = preg_split('/\s+/',$q); 
$secure_keywords = array(); 
foreach ($sExp as $key=>$keyword){
    if (strlen($keyword) >= 3){ 
    // cut off words that are less than 3 chars
    $secure_keywords[] = $keyword;
    }
}
$kwords = count($secure_keywords); 

//init empty keywords array
$keywords = array();

//secure all keywords
$keywords = array_map(function($item){ return sql_proof($item); }, $secure_keywords); 

//implode the words with a space between
$keywords = implode(" ",$keywords);

//just one query with match against ANY of the words from initial keyword array
$query="SELECT * FROM listings WHERE MATCH (meta_keywords) AGAINST ('$keywords' IN BOOLEAN MODE) ORDER BY id"; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM