2012-11-30 6 views
1

현재 우리는 사용자가 추가 한 텍스트를 유형 mediumtext로 저장하고있는 웹 사이트를 운영하고 있습니다.MySQL - 두 필드를 비교하여 퍼센트로 일치합니다.

현재 Google 시스템은 텍스트가 일치하는지 확인하고 1 : 1 (100 % 같음 - 한 개의 공백으로 새 텍스트로 간주 됨) 일 때 true를 반환합니다.

우리는 더 똑똑한 시스템을 만들려고 노력하고 있습니다. 내용이 얼마나 동일한 지 (퍼센트로) 퍼센트로 표시 할 수 있어야합니다. 불행히도 우리는 좋은 진전이 없습니다. 우리가 생각할 수있는 거의 모든 알고리즘은 올바르게 작동하지 않았거나 매우 느리고 무거웠습니다.

우리는 누군가가 우리에게 부스트를 줄 수 있기를 바라고 있습니다.

참고 : 바이트를 비교하려고했지만 상황이 제대로 작동하지 않았습니다.

편집 : 우리는 MySQL에만 국한되지 않습니다. 우리는 아파치 solr 서버에서 찾고있었습니다. 장점이 있다면이 방향이나 사건에 도움이 될만한 것을 제공하십시오.

+0

당신이 봤어 (http://dev.mysql.com/doc/refman/5.5/en [전체 텍스트 검색?] //fulltext-search.html) – Kermit

+0

예, 만족하지 못했습니다. 퍼센트로 콘텐츠를 일치시키는 데 대한 아이디어가 있습니까? – kanevbgbe

답변

0

Levenshtein 거리를 계산해야합니다. SO에

http://en.wikipedia.org/wiki/Levenshtein_distance

예 : MySQL Levenshtein

DELIMITER $$ 

CREATE FUNCTION LEVENSHTEIN(s1 CHAR(255), s2 CHAR(255)) 
RETURNS int(3) 
DETERMINISTIC 
BEGIN 
    DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT; 
    DECLARE s1_char CHAR(255); 
    DECLARE cv0, cv1 CHAR(255); 

    SET s1_len = LENGTH(s1); 
    SET s2_len = LENGTH(s2); 
    SET cv1 = 0x00; 
    SET j = 1; 
    SET i = 1; 
    SET c = 0; 

    IF s1 = s2 THEN 
     RETURN 0; 
    ELSE IF s1_len = 0 THEN 
     RETURN s2_len; 
    ELSE IF s2_len = 0 THEN 
     RETURN s1_len; 
    ELSE 
     WHILE j <= s2_len DO 
      SET c = c + 1; 
      IF s1_char = SUBSTRING(s2, j, 1) THEN 
      SET cost = 0; ELSE SET cost = 1; 
      END IF; 
      SET c_temp = CONV(HEX(SUBSTRING(cv1, j, 1)), 16, 10) + cost; 
       SET c_temp = CONV(HEX(SUBSTRING(cv1, j+1, 1)), 16, 10) + 1; 
       IF c > c_temp THEN 
        SET c = c_temp; 
       END IF; 
       SET cv0 = CONCAT(cv0, UNHEX(HEX(c))), j = j + 1; 
      END WHILE; 
      SET cv1 = cv0, i = i + 1; 
     END WHILE; 
    END IF; 
    RETURN c; 
END$$ 

DELIMITER ; 
+0

안녕하세요. mysql이 에러를 반환하기 때문에 더 많은 도움을 주실 수 있습니까? WHILE; 근처에서 사용할 올바른 구문은 입니다. END IF; RETURN c; END 'at line 36 – kanevbgbe

+0

죄송합니다. 내 코드는 아닙니다. 다른 MySQL 구현을 위해 google을 사용할 수 있습니다. 제 대답은 완벽한 해결책을 제시하는 것이 아니라 올바른 방향을 제시하는 것입니다. – kcsoft

+0

나는 그것을 고쳤으며 우리가 필요로하는 목적을 위해 매우 매우 느리다. 결과 : 10 - 9 행 표시 (총 10 개, 질의 소요 시간 232.2726 초) – kanevbgbe

관련 문제