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)) 以上、よろしくお願いいたします。