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