2014-01-27 4 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

이 고려 더 많은 행이 공통으로 간주되어 일치하지 않습니다. * –

+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 

결과 같은 시도 할 수 있습니다 : * 50 %에서 존재하는 단어 나 : 여기

 
| 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

관련 문제