2016-04-01 36 views
0

この種の検索の名前はわかりませんが、かなり一般的になってきています。複数の単語に一致するPostgresqlのテキスト検索

のは、私は次のファイル名を持つレコードがあるとしましょう: 「order_spec.rb」、「order.sass」、「orders_controller_spec.rb」

私は、以下の文字列「OC」で検索した場合、私は希望注文のoとコントローラのcに一致するため、 'orders_controller_spec.rb'を返します。 string 'は、OS' を私はすべての3が一致したいと思い、 ' O rder_ pec.rb'、 ' O RDERある場合。 s ass '、' o rders_controller_ s pec.rb '。 string「はOCO」を私は希望した場合、検索とどのように私は、これはPostgreSQLで行わ取得に行くか、この種の名前は何

「を O rders_ ntroller_spec.rbを共同」?

+0

フルテキスト検索インデックスhttp://www.postgresql.org/docs/8.3/static/textsearch.htmlを設定することをお勧めします。これはまさにこれと非常に高速です。 Googleや他の何かのような検索エンジン。 – jurhas

答えて

0

これはsubsequenceと呼ばれています。 Postgresでそれを行う簡単な方法の1つは、LIKE演算子(またはこれらのドキュメントのいくつかの他のオプション)を使用して、文字間のスペースをワイルドカードで埋め込むことです。LIKE%です。 words列にs続いoを使って何を一致させるには、それは次のようになります。

SELECT * FROM table WHERE words LIKE '%o%s%'; 

これは、比較的高価な検索ですが、あなたがより速くパターンをサポートするためのvarchar_pattern_opsまたはtext_pattern_opsインデックスのパフォーマンスを向上させることができますマッチング。

CREATE INDEX pattern_index ON table (words varchar_pattern_ops); 
+0

''%o%s% ''は' tom_russian'のようなものを捕まえることは確かです。 –

+0

'tom_russian'が正しいマッチではないことは何もありません。 Cmd-Tスタイルのファイル検索を考えているなら、単語の先頭でマッチを優先するような重み付けがありますが、途中ですべてを見つけます。 –

関連する問題