[Ludia-users 200] Re: PostgreSQL8.3の検索結果につきまして

Back to archive index

iwasa****@nttda***** iwasa****@nttda*****
2008年 3月 10日 (月) 12:43:56 JST


岩崎です。こんにちは。


> 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 メーリングリストの案内
Back to archive index