2016-12-17 3 views
0

完全な文字列をDBの中で少しだけ一致させることは可能ですか?Rails Postgres ILIKE in reverse

基本的には、「Microsoft Windows XP Home Edition」や「Microsoft Windows XP SP2」のような文字列がありますが、私のDBには「Microsoft Windows XP」があります。

現在、私はILIKEを使用しています:SP2部分が存在しないため

Issue.where(type: :os).where("name ILIKE ?", "%Windows XP SP2%")

一致を見つけることができません。

私はDBフィールドに一般的なものを入れて、入力がはるかに具体的であればマッチを見つけられるようにする機能がいくつかありますか?

答えて

1

あなたは、この場合にはPostgreSQL full text searchを使用する必要があります。

例クエリ:

Issue.where("to_tsvector(name) @@ to_tsquery('Windows|XP|SP2')") 
+0

これが私のDB内の 'name'のエントリは、 'Microsoft Windows XPの' です...動作するようには思えません私があなたの提案を介してDBに対して打ち勝っているのは、「Windows XP SP2」です。この場合、私は 'Windows XP 'が一致すると期待しています。 'Issue.where(type::os).where(" name〜*? "、" Windows XP SP2 ")'。何も返しません。 – Godzilla74

+0

はい、そうです。あなたは全文検索を見る必要があります。簡単な例 'Issue.where(" to_tsvector(name)@@ to_tsquery( 'Windows | XP | SP2') ")' –

+0

これはうまくいきました...私はスペースを区切ってからDBステートメントに移ります。あなたの答えを更新したいですか? – Godzilla74