2017-05-01 9 views
0

私はilike %name%を使用して、私のPostgreSQLデータベース内の名前を探しています。は、どのように私は、PostgreSQLとのより良い検索を実装していますか?

問題は、あまりにも多くの名前が一致しますし、私のディスプレイ環境が限られているので、私の検索の出力は、私はちょうど、さらに入力文字列に一致する名前を見逃す可能性が本質的には20に制限されています。

私は1つの列に自分の名前(ファーストネーム、ミドルネーム、ラストネーム)を格納します。私はのような試合を得る

トム・ウルフ:私はのような名前を検索すると、私は通常、3 に任意の入力文字列を分割

select l_name from leader_info where (l_name ilike $1 or l_name ilike $2 or l_name ilike $3) 

:ここでは、検索コードスニペットは、次のとおりです。

サミュエルOrtom、スティーブwaltom、SAM tommer

私だけのように一致して取得希望:一つの方法は、このかもしれ

トム・ハンクス、ウィルフレッド・タム

答えて

0

(例えばのみ単語「トム」と「スティーブ」と一致)

with t(col) as(
    select 'Samuel Ortom' union all 
    select 'tom hanks' union all 
    select 'Wilfred tom' union all 
    select 'steve waltom' union all 
    select 'A steven' union all 
    select 'sam tommer' 
) 

select * from t where 
to_tsvector(col) @@ to_tsquery('tom') 
or 
to_tsvector(col) @@ to_tsquery('steve'); 

又はもあることができる:... where to_tsvector(col) @@ to_tsquery('Tom | steve')

これはPostgresのfull text searchであり、それはまた、インデックスを使用して最適化することができます。

+0

これは動作しますが、大文字と小文字を区別しない検索が必要です。TomとTomが同じ結果にマッチするようにします。@OtoShavadze –

+0

@OnyemenamNdubuisi - これは "Tom"と一致しませんでしたか? –

+0

、私の悪いが魅力のおかげ@OtoShavadzeのように動作しますが、私たちは、検索速度のためのインデックスを使用して私の答えにリンクをたどると 'インデックスの作成を参照してくださいすることができILIKE –

関連する問題