> ## Documentation Index
> Fetch the complete documentation index at: https://villagesql.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# MySQL용 vsql_fuzzystrmatch 확장 기능

> vsql_fuzzystrmatch 확장 기능은 이름 매칭과 중복 제거를 위해 Soundex, Metaphone, Double Metaphone, Levenshtein 편집 거리를 MySQL에 추가합니다.

`vsql_fuzzystrmatch`는 PostgreSQL의 `fuzzystrmatch` 확장을 포팅한 것입니다.
한 쌍의 문자열에 대해 서로 다른 두 가지 질문에 답합니다: 발음이 비슷한지, 그리고
몇 번의 편집으로 서로 바뀌는지입니다. 이름 매칭, 철자 교정, 손으로 입력한
레코드의 중복 제거에 사용하세요.

| | |
| - | - |
| **관리자** | VillageSQL |
| **소스 및 전체 문서** | [villagesql/vsql-fuzzystrmatch](https://github.com/villagesql/vsql-fuzzystrmatch) |
| **라이선스** | GPL-2.0 |

## 설치

설치 스크립트, Docker 이미지 또는 릴리스 tarball로 VillageSQL을 설치했다면
`vsql_fuzzystrmatch.veb`는 이미 서버의 `lib/veb/` 디렉터리에 있습니다. 문 하나로
서버에 설치하세요:

```sql theme={null}
INSTALL EXTENSION vsql_fuzzystrmatch;
```

설치되었는지 확인합니다:

```sql theme={null}
SELECT EXTENSION_NAME
FROM INFORMATION_SCHEMA.EXTENSIONS
WHERE EXTENSION_NAME = 'vsql_fuzzystrmatch';
```

```
+--------------------+
| EXTENSION_NAME     |
+--------------------+
| vsql_fuzzystrmatch |
+--------------------+
```

직접 빌드하려면 [저장소](https://github.com/villagesql/vsql-fuzzystrmatch)의
빌드 지침을 따르세요.

## 추가되는 기능

| 함수 | 반환값 | 설명 |
| - | - | - |
| `vsql_fuzzystrmatch.soundex(s)` | text | Soundex 코드. 발음이 비슷한 이름은 같은 값을 가집니다. 이 함수는 한정자를 붙여야 합니다. 아래 참고 사항을 보세요 |
| `difference(a, b)` | int | 네 개의 Soundex 자리 중 몇 개가 일치하는지, 0부터 4까지 |
| `levenshtein(a, b)` | int | 편집 거리 |
| `levenshtein_cost(a, b, ins, del, sub)` | int | 같은 값이지만 연산별 비용을 직접 지정 |
| `levenshtein_less_equal(a, b, max)` | int | 거리. `max`를 넘으면 계산을 멈추고 `max` 더하기 1을 반환 |
| `levenshtein_less_equal_cost(a, b, ins, del, sub, max)` | int | 위의 두 가지를 함께 적용 |
| `metaphone(s, length)` | text | `length`로 잘라낸 Metaphone 코드 |
| `dmetaphone(s)` | text | 기본 Double Metaphone 코드 |
| `dmetaphone_alt(s)` | text | 대체 코드. 없으면 기본 코드로 대체 |

## 예제

같은 이름의 두 철자가 같은 Soundex 코드를 만들고, `difference`는 일치도를
4점 만점으로 매깁니다:

```sql theme={null}
SELECT vsql_fuzzystrmatch.soundex('Robert') AS robert,
       vsql_fuzzystrmatch.soundex('Rupert') AS rupert,
       difference('Robert', 'Rupert') AS same_sound;
```

```
+--------+--------+------------+
| robert | rupert | same_sound |
+--------+--------+------------+
| R163   | R163   |          4 |
+--------+--------+------------+
```

편집 거리는 대신 변경 횟수를 셉니다:

```sql theme={null}
SELECT levenshtein('kitten', 'sitting') AS edits,
       levenshtein_less_equal('kitten', 'sitting', 2) AS capped_at_2;
```

```
+-------+-------------+
| edits | capped_at_2 |
+-------+-------------+
|     3 |           3 |
+-------+-------------+
```

Metaphone은 Thompson의 `Th`처럼 철자가 감추는 소리를 처리합니다:

```sql theme={null}
SELECT metaphone('Thompson', 10) AS metaphone, dmetaphone('Thompson') AS dmetaphone;
```

```
+-----------+------------+
| metaphone | dmetaphone |
+-----------+------------+
| 0MPSN     | TMPSN      |
+-----------+------------+
```

> [!WARNING]
>
> MySQL에는 자체 `SOUNDEX()`가 있으며, 이름을 한정자 없이 쓰면 내장 함수가
> 우선합니다. 둘은 결과가 다릅니다: `SOUNDEX('Ashcraft')`는 `A2613`을 반환하고,
> `vsql_fuzzystrmatch.soundex('Ashcraft')`는 `A261`을 반환합니다. MySQL
> 버전은 임의 길이의 문자열을 반환한다고 문서화되어 있고, 확장 기능의 버전은
> 4자 Soundex 정의를 따릅니다. 원하는 함수를 얻으려면 호출에 확장 기능 이름을
> 한정자로 붙이세요. 여기의 다른 함수는 가려지지 않습니다.

> [!NOTE]
>
> `levenshtein_less_equal`은 실제 거리가 지정한 한도를 넘는 즉시 멈추고, 실제
> 거리와 상관없이 한도 더하기 1을 반환합니다. 한도가 2이면 거리 3인 쌍에 3을
> 반환하고, 거리 7인 쌍에도 3을 반환합니다. 한도 더하기 1은 "물어본 것보다 더
> 멀다"는 뜻으로 읽으세요.

## 참고 항목

* [MySQL에서의 퍼지 문자열 매칭](https://villagesql.com/docs/en/guides/fuzzy-string-matching.md) — 음성 코드와 편집 거리 중 선택하기
* [트라이그램 유사도](https://villagesql.com/docs/en/guides/trigram-similarity.md) — 쌍에 점수를 매기는 대신 부분 일치의 순위 매기기
* [확장 기능 설치](https://villagesql.com/docs/ko/extensions/install.md) — `INSTALL EXTENSION`의 동작 방식과 서버가 번들을 찾는 위치
* [사용 가능한 확장 기능](https://villagesql.com/docs/ko/extensions/catalog) — 전체 카탈로그
* [villagesql/vsql-fuzzystrmatch](https://github.com/villagesql/vsql-fuzzystrmatch) — 소스, 빌드 지침, 알려진 제한 사항


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.