重複の可能性: 「*abc」などのプレフィックス ワイルドカードを match-against で使用する方法
しかし、私は私の答えを見つけることができないので、重複して申し訳ありませんが、この質問をしました.
MySQL でクエリを実行しています
レコードは次のとおりです。
- 私はジョン・ドウです。
- ジョン・ドウは男だ。
- ジョンの姓はドウです
%john d%のように、最初の 2 つの結果は同じ順序で一致し、ワイルドはレコード内の任意の場所に一致するため、一致しますが、大規模なデータ セットでは、これによりパフォーマンスが低下します
だから私はグーグルで 検索し、代わりにMATCH AGAINST IN BOOLEAN MODEを見つけました。今、私の検索用語は次のとおりです。
AGAINST('"john d"')
AGAINST('john d*')
AGAINST('+john +d') etc
同じ順序で結果を取得したいだけです。(例: 1. 私は john doe です。2. john doe は男性です) この検索語 john d についてですが、達成できません。 %john d% のように、私の希望は得られますが、パフォーマンスが低下します。高速なパフォーマンスで MySQL で目的の結果を得るにはどうすればよいですか。
重複の可能性: '*abc' などのプレフィックス ワイルドカードを match-against で使用する方法
@GolezTrolは、文字列を逆にする別の列を作成するソリューションを提供しました。
user_login user_login_rev
xyzabc cbazyx
次に、 '%john d'を探す代わりに、'john d%' を探すことができます。これは、列にインデックスが付けられている場合にはるかに高速です。
しかし
@PeerBr文字列の途中から何かを見つけたい場合は、文字列を反転しても役に立たないことに注意してください。通常のインデックスを使用して'Blue%'と入力しても、逆 inices を使用して'Blue%'を反転しても、 "Jimmy Blue Jones"は見つかりません。
ありがとう