質問: お世話になります。 PostgreSQLで以下のsqlを発行した場合の結果についてご教示いただきたくご質問させていただきます。 環境 OS:ubuntu16.04 PostgreSQL:version9.5 pgroonga :postgresql-9.5-pgroongaパッケージを使用 例として以下のテーブルがあるとして、nameには日本語、英語混在の名前が登録されています。 マルチバイト全文検索対応としてpgroongaのINDEXをnameに作成しています。 table:test Column | Type | Collation | Nullable | ------------------+--------------------------+-----------+----------+------- id | integer | | not null | section_code | character varying(8) | | not null | name | text | | not null | kana | text | | not null | at_date | timestamp with time zone | | | このname中で「foo」を検索したいと思います。 ``` SELECT name FROM test WHERE name &@ 'f'; または SELECT name FROM test WHERE name LIKE '%f%'; ``` 上記のSQLでは、両方とも「foo」は検索にヒットしません。 しかし「f-oo」のような場合はヒットします。 --- ``` SELECT name FROM test WHERE name &@ 'fo'; または SELECT name FROM test WHERE name LIKE '%fo%'; ``` 「fo」2文字にすると検索にヒットします。 --- この検索結果については、おそらく私が知らないだけで、そういう仕様なのかとも思うのですが・・・、検索可能にする方法等があればご指導いただきたくお願いするしだいです。 よろしくお願いいたします。
回答: pgroongaを導入されていますから、LIKE演算子がpgroonga用に置き換えられます。 LIKE演算子 > > PGroongaは内部的にcolumn LIKE '%キーワード%'条件をcolumn %% 'キーワード'条件に変換します。 > > > PGroongaのインデックスが適用しているtext型用のデフォルトのオペレータークラスは、キーワードがアルファベットのみだった場合、キーワードの一部だけで検索してもヒットしません。 > > > リファレンスを確認されるといいですよ。