2011-12-06 4 views
6

나는 사람들이 그들의 이름과 관심사를 추가하는 mySQL 테이블을 가지고 있습니다. 나는 일종의 단어 매치를 사용하여 100 % 일치 또는 가까운 일치를 찾습니다. 나는 levenshtein 거리에 대해 듣고 있지만 그것을 내 테이블을 통해 순환시키는 방법을 모른다. 아마도 Levenshtein 거리를 사용하여 검색 단어 정확도 일치

$input = $_POST["interest"]; 
    $result = mysql_query("SELECT interest_desc FROM interests"); 

는 일부 인터넷 검색을 완료하고 내가 SOUNDEX 당신을 위해 다른 생각이 시점

function closest($seed, $haystack){ 
    $shortest = -1; 
    foreach ($haystack as $word){ 
     $lev = levenshtein($seed, $word); 
     if ($lev == 0) { 
      $closest = $word; $shortest = 0; break; 
     } 
     if ($lev <= $shortest || $shortest < 0) { 
     $closest = $word; $shortest = $lev; 
     } 
} 
return $closest; 
} 
$array = mysql_fetch_row($result); 
$closestmatch = closest($input,$array); 
echo $closetmatch; 
+0

정말 PHP로 하시겠습니까? 일치하는 항목을 검색하려면 (또는 일치하는 항목을 찾으십시오.)이 항목은 DB 끝 부분에서 올바르게 처리됩니다. 저희에게 알려주십시오. – rdlowrey

+0

@rdlowery가 말했듯이, MySQL에 대한 책임을 전달하는 편이 낫습니다. http://stackoverflow.com/questions/634995/implementation-of-levenshtein-distance-for-mysql-fuzzy-search와 http://www.artfulsoftware.com/infotree/queries.php#552 솔루션에 대해 ... – HorusKol

답변

1

에 도착.

Lo Sauerarticle은 MySQL이 쉽고 효율적으로 수행 할 수 있습니다, 나는이 잘못된 접근이다 할 PHP를 사용하여 생각하는

http://www.lsauer.com/2013/05/mysql-fuzzy-searching-fulltext-queries.html

+0

MySQL이 이미 데이터를 줄이고 인덱스를 극도로 색인화하기 때문에 성능이 향상 될 것이므로이 대답을 받아 들여야합니다 잘. SOUNDEX 값을 별도의 열에 저장할 수도 있습니다. – twicejr

0

와 함께 당신을 도울 수 있습니다. 나는 당신의 전체 스키마 구조가 어떤 것인지 잘 모르겠다. 다만 검색 매개 변수를 가지고 MySQL에서 PROCEDURE을 만들고 PHP에서 호출 할 수있다.

  1. 는 MySQL의이 비슷한을 확인 :

    - 절차의 sp_SearchInterests을 CREATE 검색 매개 변수 와 시저 만들기 ((p_SearchParam VARCHAR 30)); DELIMITER //

    관심 FROM

    SELECT interest_desc WHERE interest_desc = p_SearchParam 또는 LIKE '%의 pSearchParam %의'interest_desc //

    END; DELIMITER;

  2. PHP에서 단지 CALL sp_SearchInterests('whateveryouwant')으로 원하는 결과를 반환하십시오.

+0

쉽고 효율적입니까? 일반적으로 "저장 프로 시저 사용"에 반대합니다. 그것들은 .. MySQL에서 나쁘기 때문입니다. 또한 90 %의 경우, 저장된 코드를 사용하려는 의도가있는 경우 해당 코드를 _application_으로 이동해야하는지 생각할 시간입니다. 마지막으로, 위의 코드는 Levenshtein distance와 아무런 관련이 없습니다. –

+0

Fair point Re : Levenshtein distance. 비록 위의 proc이 그가하려고하는 것이면 초고속으로 실행되지만 Levenshtein은 과잉이라고 생각합니다. – Phrancis