> ## 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.

# Extensão vsql_fuzzystrmatch para MySQL

> A extensão vsql_fuzzystrmatch adiciona ao MySQL Soundex, Metaphone, Double Metaphone e distância de edição de Levenshtein para correspondência de nomes e deduplicação.

O `vsql_fuzzystrmatch` é um port da extensão `fuzzystrmatch` do PostgreSQL. Ele
responde a duas perguntas diferentes sobre um par de strings: se elas soam
parecido e quantas edições as separam. Use-o para correspondência de nomes,
correção ortográfica e deduplicação de registros digitados à mão.

| | |
| - | - |
| **Mantenedor** | VillageSQL |
| **Código-fonte e documentação completa** | [villagesql/vsql-fuzzystrmatch](https://github.com/villagesql/vsql-fuzzystrmatch) |
| **Licença** | GPL-2.0 |

## Instalar

O `vsql_fuzzystrmatch.veb` já está no diretório `lib/veb/` do servidor se você
instalou o VillageSQL com o script de instalação, a imagem Docker ou um tarball
de release. Instale-o no servidor com uma única instrução:

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

Confirme que ele está lá:

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

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

Para compilá-lo você mesmo, siga as instruções de compilação no
[repositório](https://github.com/villagesql/vsql-fuzzystrmatch).

## O que ela adiciona

| Função | Retorna | O que faz |
| - | - | - |
| `vsql_fuzzystrmatch.soundex(s)` | texto | O código Soundex, de modo que nomes que soam parecido compartilham um valor. Qualifique esta função, veja a nota abaixo |
| `difference(a, b)` | int | Quantas das quatro posições do Soundex coincidem, de 0 a 4 |
| `levenshtein(a, b)` | int | A distância de edição |
| `levenshtein_cost(a, b, ins, del, sub)` | int | O mesmo, com o seu próprio custo por operação |
| `levenshtein_less_equal(a, b, max)` | int | A distância, desistindo assim que ultrapassa `max` e retornando `max` mais 1 |
| `levenshtein_less_equal_cost(a, b, ins, del, sub, max)` | int | As duas anteriores juntas |
| `metaphone(s, length)` | texto | O código Metaphone, truncado em `length` |
| `dmetaphone(s)` | texto | O código Double Metaphone primário |
| `dmetaphone_alt(s)` | texto | O código alternativo, recorrendo ao primário quando não há nenhum |

## Exemplo

Duas grafias do mesmo nome produzem o mesmo código Soundex, e `difference`
pontua a correspondência de 0 a 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 |
+--------+--------+------------+
```

A distância de edição conta as alterações, em vez disso:

```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 |
+-------+-------------+
```

O Metaphone lida com os sons que a grafia esconde, como o `Th` em Thompson:

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

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

> [!WARNING]
>
> O MySQL tem um `SOUNDEX()` próprio, e a função nativa vence quando você
> escreve o nome sem qualificação. As duas discordam: `SOUNDEX('Ashcraft')`
> retorna `A2613`, enquanto `vsql_fuzzystrmatch.soundex('Ashcraft')` retorna
> `A261`. A versão do MySQL é documentada como retornando uma string de
> qualquer comprimento, e a da extensão segue a definição Soundex de quatro
> caracteres. Qualifique a chamada com o nome da extensão para obter a que você
> quer. Nenhuma outra função aqui é sobreposta.

> [!NOTE]
>
> O `levenshtein_less_equal` para assim que a distância real ultrapassa o
> limite que você deu, e então retorna o limite mais 1, seja qual for a
> distância real. Com um limite de 2, ele retorna 3 para um par com distância 3
> e 3 para um par com distância 7. Leia o limite mais 1 como "mais distantes do
> que você perguntou".

## Veja também

* [Correspondência aproximada de strings no MySQL](https://villagesql.com/docs/en/guides/fuzzy-string-matching.md) — escolhendo entre códigos fonéticos e distância de edição
* [Similaridade por trigramas](https://villagesql.com/docs/en/guides/trigram-similarity.md) — ordenar correspondências parciais em vez de pontuar pares
* [Instalar extensões](https://villagesql.com/docs/pt-BR/extensions/install.md) — como o `INSTALL EXTENSION` funciona e onde o servidor procura um bundle
* [Extensões disponíveis](https://villagesql.com/docs/pt-BR/extensions/catalog) — o catálogo completo
* [villagesql/vsql-fuzzystrmatch](https://github.com/villagesql/vsql-fuzzystrmatch) — código-fonte, instruções de compilação e as limitações conhecidas


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