[Senna-dev 723] Re: 最初に検索できたデータが、別データを追加すると検索できなくなります

Back to archive index

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




Senna-dev メーリングリストの案内
Back to archive index