行のタイトル列に従って同様の行を選択したい。タイトルの列には、ほとんどの場合、5 つまたは 6 つのキーワードが含まれています。どのアルゴリズムをお勧めしますか? たぶん?
PS: タイトル列には、Ç、Ö、Ş などの Unicode 文字があります...
私の質問の回答mysql全文検索。ユニコードにも対応。
SELECT *, match(project_title) against('sample project 55') as similarity
FROM projects
WHERE status IN(1, 2, 3, 4, 5, 6) AND id != ? AND match('sample project 55') against(?)
ORDER BY similarity DESC
スペルと発音が似ているということであれば、その機能の使用を検討したいと思いますSOUNDEX
。
正直なところ、私は のテーブルを作成し、keywords(id, external_id, keyword)
そのテーブルをそれ自体に対して結合し、一致する数で並べ替えてから、行を取得します。
1 つの行に対して照合する場合は、結合の効率を大幅に向上させるために、その行のみを選択できます。
これを SOUNDEX と組み合わせて、近いものを一致させることができます。