2014-01-27 112 views
1

我有以下的「銀行」表MySQL的全文搜索結果相關性

ID | name 

1 | JPMorgan Chase bank 
2 | Bank of south 
3 | Citigroup bank 
4 | Wells Fargo bank 
5 | Bank of New York 

因此,當用戶搜索「銀行」我想要的搜索結果返回如下:

Bank of New York 
Bank of south 
Citigroup bank 
JPMorgan Chase bank 
Wells Fargo bank 

但我在它下面的代碼返回:

JPMorgan Chase bank 
Bank of America 
Citigroup bank 
Wells Fargo bank 
Bank of New York 

這是代碼:

$search_term = 'bank of'; 

$sql2 = "SELECT *, 
     MATCH(name) AGAINST ('.$search_term.' IN BOOLEAN MODE) 
     AS relevance FROM banks 
     HAVING relevance > 0.8 
     ORDER BY relevance DESC"; 

謝謝!

+1

考慮一下:*存在於50%的詞語或更多的行被認爲是普遍的並且不匹配。* –

+0

@juergend,對,但我的選擇是什麼? – bekman

回答

1

......對,但我的選擇是什麼?

你可以嘗試這樣的事情

SELECT *, 
     MATCH(name) AGAINST ('bank of' IN BOOLEAN MODE) AS relevance, 
     name LIKE '%bank of%' AS full_match 
    FROM banks 
HAVING relevance > 0.8 
ORDER BY full_match DESC, relevance DESC, name 

結果:

 
| ID |    NAME | RELEVANCE | FULL_MATCH | 
|----|---------------------|-----------|------------| 
| 5 | Bank of New York |   1 |   1 | 
| 2 |  Bank of south |   1 |   1 | 
| 3 |  Citigroup bank |   1 |   0 | 
| 1 | JPMorgan Chase bank |   1 |   0 | 
| 4 | Wells Fargo bank |   1 |   0 | 

這裏是SQLFiddle演示

+0

但它太慢了 – bekman