Yamada Takuji
yamad****@media*****
2007年 12月 17日 (月) 10:59:48 JST
こんにちは、山田です。 岩崎さん、末永さん、お返事ありがとうございました。 >岩崎さん 2gramでindexが作られているから、基本的に一文字ではヒットせず、 あくまで部分一致が走った時だけヒットするのですね。 「群青」がヒットしたのは、特別にindex化される最後の一文字が たまたま'青'だったからヒットしていた訳ですね。 >末永さん 1.0.7のリリース時の説明を拝見したところ、まさにこういう問題 を避けるためにデフォルトの検索方法が変更されたのですね。 よく目を通していませんでした・・。 お二方のご指摘にもとづき、下記のクエリーを行ったところ、 目的の検索結果になることを確認いたしました。 select * from foo where keyword @@ '*E10 青'; select * from foo where keyword @@ '*E-7 青'; 複数アプリの共有環境を使用しているため、senna自体を1.0.7にバージョン アップ出来るか分からないのですが、さしあたり問題の原因と解決方法が 分かり納得しました。 ありがとうございました。 Tasuku SUENAGA wrote: > 末永と申します。 > > Senna 1.0.7以降ですと指摘の問題は起こらないと思います。 > バージョンアップをお勧めいたします。 > > もしくは、岩崎さんがご指摘されたように、 > '*E10 青'としたり、 > '*E-7 青'としたりするとよいでしょう。 > > Yamada Takuji さんは書きました: > >>こんにちは、山田です。 >>非常に分かりにくい表題で申し訳ありません。 >>以下、現象の説明と、ご質問をさせていただきます。 >> >>[環境] >>PostgreSQL 8.1.9 >>Ludia 1.1.0 >>Senna 1.0.5 >> >>[現象] >>(1) fooテーブルのkeywordカラムに、下記の条件でindexを作成します。 >> >> FOO_DB=> set ludia.sen_index_flags = 18; --# SEN_INDEX_NGRAM|SEN_INDEX_SPLIT_ALPHA >> FOO_DB=> create index foo_idx on foo using fulltextu (keyword); >> >>(2) fooテーブルのkeywordカラムに検索データを1件登録します。 >> >> FOO_DB=> insert into foo (keyword) values ('青ノ時代'); >> >>(3) fooテーブルを'青'で検索すると、上記の「青ノ時代」がヒットします。 >> >> FOO_DB=> select * from foo where keyword @@ '青'; >> >>(4) 次にfooテーブルにもう1件データを登録します。 >> >> FOO_DB=> insert into foo (keyword) values ('群青'); >> >>(5) 再度fooテーブルを'青'で検索すると「群青」はヒットしますが、 >> 「青ノ時代」がヒットしなくなります。 >> ('青ノ'で検索すればヒットします) >> >>[質問] >>最初は'青'で検索できたデータが、途中で別データを追加したらヒットしなくなるのは、 >>変な気がするのですが、indexの作成方法が間違っているのでしょうか? >>もしくは、これがsennaとしては正しい動作になるのでしょうか? >> >>期待している動作としては、'青'で検索したときに「青ノ時代」も「群青」も >>どちらもヒットする、というものです。 > > --- > Tasuku SUENAGA <a****@razil*****> > > _______________________________________________ > Senna-dev mailing list > Senna****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/senna-dev > バグ報告方法:http://qwik.jp/senna/bug_report.html