だから、私はPHP + MySQLを持っています。列を調べて、title
最も類似した文字列を見つけています。
データベースで最も類似した文字列を見つけて、それらを類似度順に並べ替えるにはどうすればよいですか?
PHP 関数levenshteinを使用して、文字列間のレーベンシュタイン距離を取得できます。
レーベンシュタイン距離は、文字列がどの程度異なるか (逆に、どの程度類似しているか) の尺度です。3 つの文字列があるとします。
レーベンシュタイン距離を使用すると、次の結果が得られます。
See spot run - See spot run: 0
See spot run - Watch spot run: 5
See spot run - Hello my name is John: 17
Watch spot run - See spot run: 5
Watch spot run - Watch spot run: 0
Watch spot run - Hello my name is John: 18
Hello my name is John - See spot run: 17
Hello my name is John - Watch spot run: 18
Hello my name is John - Hello my name is John: 0
ご覧のとおり、類似した文字列ほどレーベンシュタイン距離が小さくなります。比較するすべての文字列間で結果を保存する必要があるため、このソリューションは常に実用的ではありません。したがって、すでに 1000 件のレコードがある場合、新しいレコードを作成するときに、他のすべての文字列と比較して新しい文字列の結果を取得する必要があります。その後、これらのスコアを SQL クエリで使用できます。
これはあなたにとって最善の解決策ではないかもしれませんが、誰も言及していなかったので、そうすると思いました。
文字列の類似性については、他のいくつかの興味深い PHP 関数を参照することもできます。
本当に何をしたいのかわかりませんが、タイトル列で最も類似したテキストを見つけるクエリを探していると思います。
それが本当なら、それは助けることができます:
SQL
SELECT * FROM yourTable where table LIKE '%searchedText%'
この場合%
、あなたが含むものを見つけることを意味しますsearchedText
ここでSELECT LIKE クエリを使用する必要があります。これに関するドキュメントがあります。
最も簡単な方法は、SQL クエリで LIKE を使用することです。
WHERE column_name LIKE '%string%'
空白を「%」に置き換えて、より効果的にすることができます。私はそれを正しい方法とは呼びませんが、あなたの質問を考えるとそれで十分です。