hirok****@mx4*****
hirok****@mx4*****
2008年 3月 10日 (月) 18:20:10 JST
岩崎さん 小谷です。詳しいご説明ありがとうございました。 なるほど、演算子の重複が問題でしたか。 おかげさまで、現在正常に動いているようです。 次期バージョンのLudiaが出た際には、そちらも利用させていただきます。 どうもありがとうございました。 <iwasa****@nttda*****>さん: > 岩崎です。こんにちは。 > > > > N-gramインデックスにて作成したフィールドの検索時に正しく検索結果が返 って > > きませんでしたので、原因がわかる方がおられればお知らせいただきたく思 いま > > PostgreSQL8.3からはtsearch2という > これまでcontribにあった機能が標準で入っているのですが、 > tsearch2も@@演算子を定義しているため、 > そちらの関数が実行されていることが原因だと思われます。 > (細かくいえば、PostgreSQL8.2以前のtsearch2の場合は、 > 右辺と左辺にtext型を取る@@演算子は定義していなかったため、 > Ludiaと共存させても問題ありませんでした。) > > > PostgreSQLのshareディレクトリにインストールされたpgsenna2.sqlを、 > 編集して@@と書いてある部分を他と被っていないもの(例えば%%)と > 置き換えて試してみていただけないでしょうか? > (ソースからインストールを繰り返し行うのであれば、 > ソースアーカイブに含まれるpgsenna2_83.sql.inを編集したほうが効率的です。 ) > > > PostgreSQL8.3以降向けの演算子については、 > 次のLudiaのリリースで変更される予感です。 > > > > > -----Original Message----- > From: ludia****@lists***** > [mailto:ludia****@lists*****] On Behalf Of > hirok****@mx4***** > Sent: Sunday, March 09, 2008 1:18 AM > To: ludia****@lists***** > Subject: [Ludia-users 199]PostgreSQL8.3の検索結果につきまして > > 小谷と申します。 > よろしくお願いします。 > > N-gramインデックスにて作成したフィールドの検索時に正しく検索結果が返っ て > きませんでしたので、原因がわかる方がおられればお知らせいただきたく思い ま > す。 > PostgreSQLを8.3.0のバージョンものを使用しているせいかもしれませんが。。 。 > > 使用したソフトウェア環境は以下のとおりです。 > > Linux CentOS 5.0 > Ludia 1.4.0 > Sennna 1.0.9 > mecab 0.96 > > PostgreSQL 8.3.0 > > > 検証用にThinkitの記事と同様のテーブルを作成しました。 > http://www.thinkit.co.jp/cert/article/0612/8/4/3.htm > > また、PostgreSQL 8.2.3 + Ludia 1.3.1 の結果も載せておきます。 > 142件のレコードが返ってくるのが正常と思われます。 > > > ■1. addressフィールドにのみ2-gramインデックスを作成 > > SELECT * FROM zip WHERE address @@ '*D+ 春日町' OR zipcode = '春日町'; > > -> Postgres8.2.3 + Ludia 1.3.1 正しくデータ取得 > -> Postgres8.3.0 + Ludia 1.4.0 結果が0件 > > [explainの結果] > Seq Scan on zip (cost=0.00..3507.68 rows=123 width=42) > Filter: ((address @@ '*D+ 春日町'::text) OR ((zipcode)::text = '春 日 > 町'::text)) > > > ■2. zipフィールドにB-treeインデックスを作成 > > SELECT * FROM zip WHERE address @@ '*D+ 春日町' OR zipcode = '春日町'; > > -> Postgres8.2.3 + Ludia 1.3.1 正しくデータ取得 > -> Postgres8.3.0 + Ludia 1.4.0 正しくデータ取得 > > [explainの結果] > Bitmap Heap Scan on zip (cost=9.50..364.11 rows=123 width=42) > Recheck Cond: ((address @@ '*D+ 春日町'::text) OR ((zipcode)::text = > '春日町'::text)) > -> BitmapOr (cost=9.50..9.50 rows=123 width=0) > -> Bitmap Index Scan on idx_ngram (cost=0.00..5.17 rows=122 > width=0) > Index Cond: (address @@ '*D+ 春日町'::text) > -> Bitmap Index Scan on idx_zipcode (cost=0.00..4.27 rows=1 > width=0) > Index Cond: ((zipcode)::text = '春日町'::text) > > > ■3. addressフィールドにのみ2-gramインデックスを作成し、*D+を削除 > > SELECT * FROM zip WHERE address @@ '春日町' OR zipcode = '春日町'; > > -> Postgres8.2.3 + Ludia 1.3.1 正しくデータ取得 > -> Postgres8.3.0 + Ludia 1.4.0 北海道紋別郡興部町興部(春日町)とい う > データ1件のみ取得 > > > [explainの結果] > Seq Scan on zip (cost=0.00..3507.68 rows=123 width=42) > Filter: ((address @@ '春日町'::text) OR ((zipcode)::text = '春日町' :: > text)) > > > 以上、よろしくお願いいたします。 > > > > > > _______________________________________________ > Ludia-users mailing list > Ludia****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/ludia-users > > _______________________________________________ > Ludia-users mailing list > Ludia****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/ludia-users