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

Back to archive index

hirok****@mx4***** hirok****@mx4*****
2008年 3月 9日 (日) 01:17:30 JST


小谷と申します。
よろしくお願いします。

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