1

SQL で検索クエリを実行しようとしています。私のページには、値が取得され、SQL ステートメントに単純に連結される入力フィールドが含まれています。

したがって、Select * FROM users検索後は になりSELECT * FROM users WHERE company LIKE '%georges brown%'ます。

次に、ユーザーの入力内容に基づいて結果を返します。この場合、ジョージ・ブラウン。ただし、Georges Brown ('s' 付き) と正確に入力された会社のエントリのみが検索されます。

私がやろうとしているのは、Georges だけでなく George (no 's') のエントリを含む結果セットを返すことです。

この検索をより柔軟にして、Georges と George の結果が見つかるようにする方法はありますか?

4

6 に答える 6

1

の前後にさらにワイルドカードを使用してみてくださいgeorge

SELECT * FROM users WHERE company LIKE '%george% %brown%'
于 2012-10-23T14:30:55.400 に答える
0

使用するSOUNDEX

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex

最後の 2 文字を削除して SOUNDEX コードを取得し、それらを比較することもできます。

于 2012-10-23T14:32:43.760 に答える
0

特定のケースでは、ワイルドカードを使用できます。

WHERE company LIKE '%george% brown%' -- will match `georges` but not `georgeani`

_は単一文字のワイルドカード%ですが、 は複数文字のワイルドカードです。

ただし、 Sphinxなど、インデックス作成には別のソフトウェアを使用する方がよい場合があります。

「柔軟なテキスト処理。Sphinx のインデックス作成機能には、SBCS および UTF-8 エンコーディングの完全なサポート (事実上、世界中のすべての言語がサポートされていることを意味します)、ストップワードの削除とオプションのヒット位置の削除 (ヒットレス インデックス作成)、単語による形態学と同義語の処理が含まれます辞書とステマー、例外と混成文字などを形成します。」

たとえば、soundex よりも正確な検索を提供しながら、部分一致でよりスマートな検索を行うことができます。

于 2012-10-23T14:33:44.587 に答える
0

このクエリを試してください:

SELECT * 
FROM users 
WHERE company LIKE '%george% brown%'
于 2012-10-23T14:31:04.530 に答える
0

データベース システムのドキュメントを参照する必要があります。たとえば、MySQL はSOUNDEX関数を提供します。

それ以外の場合は、大文字または小文字の文字列でのみ機能することで、常に機能し、より適切なマッチングが得られます。SQL-92 では、、、TRIMおよびUPPER関数LOWERが定義されています。したがって、次のようにしWHERE UPPER(company) LIKE UPPER('%georges brown%')ます。

于 2012-10-23T14:35:39.227 に答える
0

おそらく、検索文字列を個々の単語に分解してから、それらの各単語の複数形/単数形を見つけるのが最善です. 次に、各単語の両方の可能性に対して like を実行します。

ただし、これを大量のデータで使用できるほど効率的にするには、おそらく各企業にリンクされた単語のテーブルに対して実行する必要があります。

あまりにも多くの単語が類似しているため、Soundex だけではおそらくあまり役​​に立ちません (最初の文字が単語の最初の文字で、次の 3 文字が数値コードである 4 文字のコードが得られます)。レーベンシュタインの方が正確ですが、MySQL にはこのメソッドが組み込まれていませんが、php には高速な関数があります (計算に使用した MySQL 関数は遅すぎて、大規模な検索では役に立ちませんでした)。

同様の検索機能のために私が行ったことは、入力文字列を取得して単語に分解し、それらの単語を単数形に変換することでした (使用した単語の表には単数形の単語のみが含まれています)。次に、単語ごとに、同じ文字で始まるすべての使用済み単語を見つけ、レーベンシュタインを使用して最適な一致を取得しました。そして、これから可能な一致をリストしました。タイプミスに対処できるようになり (誰かが Goerge を入力した場合、George が見つかる可能性が高くなります)、ベスト マッチを見つけることも可能になりました (つまり、誰かが 5 つの単語で検索したのに 4 つしか見つからなかった場合)。綴りが何マイルも離れている場合は、いくつかの代替案を考え出すこともできます.

Metaphone と Double Metaphone も参照してください。

于 2012-10-23T15:19:25.337 に答える