PostgreSQLでの日本語検索方法とは?

このQ&Aのポイント
  • PostgreSQLを使用して日本語検索を行う方法について教えてください。
  • 日本語の検索をするためには、pg_trgmやpg_bigmなどのモジュールをインストールする必要があります。
  • インデックスの作成やクエリの実行など、具体的な手順についても教えてください。
回答を見る
  • ベストアンサー

PostgreSQLでの日本語検索するには

PostgreSQLを使用しております。 バージョンは9.1です。 日本語の検索を行いたいので、create index ・・・を使用してインデックスを作成し select * from hoge where item like '%ほげ%'; といった形で検索をかけてみました。 正常?に検索でき結果が出力されました。 いろいろネットを調べてみると、PostgreSQLで日本語の検索をやるにはpg_trgmやpg_bigmを インストールしないとダメなようなことが書いてあるのですが、私がやったことは誤っているのでしょうか? やはりpg_trgmなどをインストールしなければ日本語の検索はできないのでしょうか? 詳しい方教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • daichie
  • ベストアンサー率100% (1/1)
回答No.2

> いろいろネットを調べてみると、PostgreSQLで日本語の検索をやるにはpg_trgmやpg_bigmを > インストールしないとダメなようなことが書いてあるのですが、私がやったことは誤っているのでしょうか? 日本語の検索をするのにpg_trgmやpg_bigmのインストールが必須ということはありません。 これらは、PostgreSQL上で全文検索機能を提供するツールです。 これらを使うことで、spring3333さんが書いている中間一致検索のSQLに対しても、 インデックスを使って高速な検索が可能です。(これは、日本語、英語関係ありません。) 中間一致検索が多い場合は、こういったツールの導入も考えた方がいいかもしれませんね。 蛇足かもしれませんが、各検索方法にどういったインデックスが効くのかは以下のページを参考にされるとよいかと思います。 ●Let's PostgreSQL ~テキスト検索の方法とインデックス http://lets.postgresql.jp/documents/technical/text-processing/3/

spring3333
質問者

お礼

テストに使用したデータ件数が少なかったので速度はわからなかったのですが、件数が増えると検索速度にかなり影響が出るという事なんですね。 参考URLありがとうございます。 勉強になりました。

その他の回答 (1)

回答No.1

> PostgreSQLで日本語の検索をやるにはpg_trgmやpg_bigmをインストールしないとダメ ダメということではなく、遅いか速いか ということでしょう。

関連するQ&A

  • PostgreSQLの「*」について・・?

    こんにちわ, 今PostgreSQLを勉強しています。 たとえば, SELECT * FROM table where field ~ 'a'; とすると,tableテーブルからfieldに「a」が入っている項目を抜き出す,となります。 これに SELECT * FROM table where field LIKE '*a'; とすると,エラーが出てしまいます。 *(ワイルドカード)の使用はどのようなときに使用するのでしょうか。PostgreではLinuxとは違う使用をすると書いてあったのですが,よくわかりません。 よろしくおねがいします。

  • MySQLで日本語検索

    MySQL初心者のものです。 今PHPとMySQLを利用して検索システムを作っています。 しかし日本語検索がどうしてもうまくいきません。 一応「教えてgoo」でも探してみたのですが、解決しませんでした。 MySQLで、 テーブル名 table フィールド名 field とすると、 select * from table where field like '%キーワード%'; のように検索してみたのですが、思うような結果が返ってきません。 ネットで検索すると「senna」をインストールと書かれていましたが、 そういったものをインストールしなければMySQLで日本語検索は出来ないものなのでしょうか? ちなみに MySQL5.0 PHP5.2.1 を利用しています。

  • PostgreSQLでの類義語検索

    かけだしのプログラマーです。 PostgreSQLで全文検索や類義語検索を行います。 現在、Ludiaの使用を検討していますが、Ludiaには類義語検索機能はないと、 サイトに書いてありました。 また、「PostgreSQL、類義語」で検索してみたところ、dict_xsyn(拡張類義語辞書) というものがひっかかりましたが、情報が少なすぎてコレがいまいち何なのか分りません。 類義語検索を行うのに、何か効率の良い方法があるかご存知でしょうか? もしくは、原始的にselect文にORを組み合わせて発行するしかないのでしょうか? 御助言よろしくお願いします。 <条件>  PostgreSQL 8.3  類義語検索  EUC-JP  全文検索機能,類義語検索機能

  • PostgreSQLの言語設定について

    サーバーOS:ターボ10 クライアントOS:winXP DB:PostgreSQL 7.4.5 エミュレータ:Tera Term Pro version 2.3 この場合、PostgreSQLのエンコードは何がいいですか? やりかたはどうすれば良いですか? Tera Termのエンコードは一応SJISにしようかと漠然と思いましたがEUCの方がいいですか? サーバー自体のエンコードは何か設定必要ですか? (1)winXPからTera Termでターボ10に搭載したポスグレのテーブル項目に日本語をインサートし、そのテーブルをODBC経由でwinXPのアクセスでブラウズする。 サーバー操作 create table tbl1 (item1 char(10)); insert into tbl1 values('あいうえお'); PC操作 アクセスでブラウズ (アクセスの接続は解決済み) (2)winXPのアクセスでODBC経由のポスグレのテーブルを編集した後、Tera Termでターボ10に搭載したポスグレのテーブル項目に日本語の検索をかける。 PC操作 アクセスで'かきくけこ'を挿入。 サーバー操作 select * from tbl1 where item1 like'か%';

  • PHPとPostgreSQL接続 (スキーマ)

    いつもお世話になっております。 現在、PHP(5.3.1)とPostgreSQL(9.2)で開発をしております。 エラーが発生しており大変困っております。 こちらが発生するエラーです。 Warning: pg_exec() [function.pg-exec]: Query failed: ERROR: schema スキーマが見つからないとのことです。 そして、以下がコードとなります。 <?php // PostgreSQL Connect if (!($cn = pg_connect("host=*** port=*** user=*** password=*** dbname=***"))) { die; } // PostgreSQL Select $sql = "select * from t_test.na1"; if (!($rs = pg_exec($sql))) { die; } // PostgreSQL Get Records $ct = pg_numrows($rs); for ($i = 0; $i < $ct; $i++) { $item = pg_fetch_array($rs, $i); $txt = "${item[1]}"; } // PostgreSQL Disconnect pg_close($cn); ?> 現在のデータベースのスキーマについてですが「na1」と「public」の2つが存在しています。 試しに、na1とpublicのテーブルをまったく同じにして SQLの部分を「select * from t_test」に変更すると「public」側のテーブルが覗けます。 しかし、SQLの部分を「select * from t_test.na1」に変更すると「スキーマが見つかりません」 というエラーが発生してしまいます。 スキーマがあるにもかかわらずこのエラーがでてしまうため原因が分からず困っております。 もしお分かりになる方いらっしゃいましたら、教えていただければと思います。 何卒よろしくお願いします。

    • ベストアンサー
    • PHP
  • LIKE検索の場合うまくいきません

    WEBアプリとSQLServerでSELECTをするときに不正をされないように SELECT * FROM DB WHERE DB.A = 検索文字 を SELECT * FROM DB WHERE DB.A= @A のようにして、@Aを後で指定しますが、 SELECT * FROM DB WHERE LIKE '%検索文字' のようにLIKE検索の場合うまくいきません。 どのように記述したらいいのでしょうか? SELECT * FROM DB WHERE DB.A LIKE @A --> 駄目 SELECT * FROM DB WHERE DB.A LIKE '%@A' --> 駄目

  • sjisでのあいまい検索を教えてください

    Postgres8です。 データベースのエンコーディングは【SQL_ASCII】です。 LIKE検索をした場合のSJISの文字化けに対する対処方法を教えてください あいまい検索をしたいのですが、 文字化け対象文字を含む場合、 どのように記述すればいいのですか? select * from aaa where name = 'パソ\コン'; 上記のように完全一致で検索をすると抽出できます。 select * from aaa where name like '%パソ%' 上記のよう指定してlike検索をしても抽出できます。 しかし以下の場合どちらでも抽出できません。 select * from aaa where name like '%パソコ%' select * from aaa where name like '%パソ\コ%' よろしくお願い致します。

  • PHPとPostgreSQL

    PHP4.3.1とPostgreSql7.2.4で簡単な検索システムを作っています。 ユーザーがWeb上から入力した値をSQLのWhere句に指定していますが、 大文字小文字の区別なく検索したい為、lowerを使っていますがうまく行きません。 $strWord=$txtWord//ユーザー入力文字列 //以下SQL $query = "select Title from t_Master Where lower(Title) like '%$strWord%')"; 全て大文字小文字の区別無しに検索できる方法がありましたらご教授ください。

    • ベストアンサー
    • PHP
  • DELETEの操作で (PostgreSQL)

    linux postgresql 8.4 で1行DELETEしたいのですが select * from table_a where a_key = 1400; で1件検索できても delete from table_a where a_key = 1400 returning *; としてもレコードが表示されません。 原因の調べ方を教えてもらえないでしょうか? よろしくお願いします。

  • LIKEで検索

    MySQL 4.0.20 + PHP で名前が入ったテーブルよりLIKEを使って検索すると全然関係のない名前まで引っ張ってきます。 SELECT * FROM `lady` WHERE name LIKE 'らむ' 上記で検索すると 「とも」って名前まで引っ張ってきます。 SELECT * FROM `lady` WHERE name LIKE 'らな' だと 「るる」って名前も引っ張ります。 どうも「ら行」の検索がうまく出来ないようです。 何か回避方法はあるのでしょうか? よろしく御願いします

    • ベストアンサー
    • MySQL