2012-02-08 3 views
0

select 쿼리에서 결과를 선택할 때 mysql이 특정 지정된 문자열을 동일하게 간주하도록하는 것이 가능한지 알아 내는데 어려움이 있습니다.MYSQL 강제 패턴 일치

예를 들어 "trachiotomy"라는 단어가 포함 된 열이 있지만 언어의 특성상 검색어가 "trahiotomy"(c 누락)로 표시 될 가능성이 큽니다.

문자의 패턴을 다른 문자로 인식하도록 쿼리를 강제 할 수있는 방법이 있습니까? 예를 들어 문자 "ach"의 단어 내의 모든 인스턴스를 "ah"와 일치 시키거나 그 반대의 경우도 마찬가지입니다. 본질적으로 그것이 작성된 방법에 상관없이 그것을 강요합니다.

또 다른 예는 Archon이라는 단어입니다. Arhon과 일치시키고 싶습니다. 사용자 입력이 Archon 인 경우 데이터베이스 데이터 Arhon과 일치하고 그 반대의 경우도 마찬가지입니다.

나는 약간의 soundex를 실험했지만 일부 인스턴스와 일치하지만 알고리즘이 작동하는 방식으로 인해 원하는 일치하는 문자열이 단어의 시작 부분에있는 경우에는 처리하지 못할 것으로 보인다.

예를 들어 "Chorevo"라는 단어는 "Horevo"라는 단어와 일치하지 않습니다. 어떤 식 으로든 "chor"은 "hor"와 같거나 그 반대 일 수 있습니다.

어떻게 든 일치 할 수 있는지 보려면 REGEXP를 읽는 중입니다. (예 : REGEXP 'arch', 'arh')

이 시점에서 나는 전체 텍스트 일치 쿼리를 사용하고 있지만 문제가있는 것으로 판명 될 수 있습니다.

나는이 사실을 분명히 하였지만 확실한 도움이 될 것이라고 확신하지 못합니다.

+0

가 levenshtein 알고리즘으로 사용 될 수 있습니까? 같은 것을 : http://www.artfulsoftware.com/infotree/queries.php#552 –

+0

levenstein (사용자 정의 함수)을 테스트했지만이 유형의 단어로 문제를 해결할 수없는 것 같습니다 (특히 c Chorevo/Horevo의 다른 글자로 시작하는, 음성 학적으로는 유사하지만) 또 다른 시도를 할 것입니다. 너무 깊이 파고 들지는 않았지만, 큰 데이터 세트로는 약간 느린 것 같았습니다. – Larry

답변

0

이것은 발음 일치라고합니다. MySQL은 soundex(str) 함수와 a SOUNDS_LIKE b 절 (비교적 soundex(a) = soundex(b)의 줄임말)에 비교적 기본 버전을 구현합니다. 이러한 특성은 언어에 따라 다르며 MySQL 구현은 영어 단어 용으로 설계되어 사용자 환경에서는 작동하지 않을 수 있습니다.

또는 당신은 당신이 원하는 것을 그 자신의 변화를 작성하고 (별도의 열 또는 테이블) 데이터베이스에 저장하기 전에 데이터에 적용/연구 할 수있다.

+0

불행히도 soundex 알고리즘은 첫 번째 문자 (알고리즘의 핵심 요소)가 매우 잘 설명 된 것과 같은 대소 문자를 구분하지 못합니다. – Larry

+0

당신이 필요로하는 해싱 알고리즘을 직접 작성해야한다고 생각합니다. –