これらの機能のpostgres ドキュメントを見ると、Double Metaphone のエンコードされた文字列の長さをパラメトリックに制御することはできません。単一の Metaphone の場合、出力文字列のみを切り詰めることができます。
max_output_length
出力 metaphone コードの最大長を設定します。それより長い場合、出力はこの長さに切り捨てられます。
ただし、metaphone メソッドのいずれかからエンコードされた出力を使用するTrigram Similarity
か、エンコードされた出力を使用することで、より良い結果が得られる場合があります。これは、Metaphones を使用して音声順列を処理するためのより強力な方法です。Levenshtein Distance
例
アーティスト に可能なすべてのスペルの順列を考慮してください。Cyndi Lauper
トリグラムの類似性を持つダブル メタフォンを使用すると、間違った文字列cindy lorper
と正しいスペルの間で 100% の類似性を達成できます。
SELECT similarity(dmetaphone('cindy lorper'), dmetaphone('cyndi lauper'));
利回り: similarity real: 1
(つまり: 100% の類似性)
これは、Double Metaphone を使用した両方の入力文字列のエンコーディングが同一であることを意味します。Metaphone を使用する場合は、少し異なります。以下のすべての収量SNTLRPR
SELECT metaphone('cyndy lorper',10);
SELECT metaphone('sinday lorper', 10);
SELECT metaphone('cinday laurper', 10);
SELECT metaphone('cyndi lauper',10);
yields:SNTLPR
とは 1 文字だけ異なりますSNTLRPR
レーベンシュタイン距離を使用して計算することもできます。これにより、操作するフィルター可能なパラメーターが得られます。
SELECT levenshtein(metaphone('sinday lorper', 10), metaphone('cyndi lauper', 10));
収量:levenshtein integer: 1
より長い名前には機能しますが、Lee や John のような名前にはもう少し不正確です。
より完全なreprexがなければ、問題を正確に把握するのは少し困難です。
SELECT similarity(dmetaphone('lee'), dmetaphone('leigh'));
SELECT similarity(dmetaphone('jon'), dmetaphone('john'));
両方の結果: similarity real: 1
(つまり: 100% の類似性)
編集: postgres とのあいまい一致のわかりやすいガイドを次に示します。