ASARI Takashi
asari****@users*****
2008年 1月 9日 (水) 12:34:54 JST
浅利です。 08/01/09 に kousa****@nttda*****<kousa****@nttda*****> さんは書きました: > 幸坂です。こんにちは。 > > ご報告ありがとうございます。 > 調査したところ、Ludiaのバグのようです。 > 次のバージョンのLudiaで修正します。 素早いご対応、ありがとうございます。 ついでにちょっと現在の pgs2snippet1() の利用状況を。 pgs2snippet1() は便利ですが、 配列インデックスを試用している身としては ちょっと悩ましい部分もあります。例えば、次の文は当然のようにエラーになります。 test=# SELECT pgs2snippet1(1, 10, 1, ' *', '* ', -1, 'テスト', '一致しない場合'); ERROR: pgsenna2: sen_snip_add_cond() failed 4 配列型インデックスや、おそらく普通のマルチカラムインデックスを 使っている場合、どのカラムにヒットしたのかを判定してからでないと スニペットは作成できないことになると思います。 今は CASE WHEN pgs2contain(...) THEN ... END で囲ってみています。 SELECT pid, iname, oname, CASE WHEN pgs2contain(word, ?) THEN pgs2snippet1(1, 320, 1, '<em>', '</em>', -1, ?, word) ELSE substring(word from 1 for 320) || ' ...' END AS kwic, pgs2getscore(ctid) AS score FROM p WHERE array[iname, oname, word] @@ ? ORDER BY score DESC LIMIT 20; 上の例では本来 iname, oname も同様に CASE ... END で 囲う必要があります。ちょっと煩雑のような気がします。 もうひとつ、マッチしていない場合のデフォルト値を 引数にとるような関数を便利かなあ、と思っています。 それでは。 -- ASARI Takashi @ Todai Fink Team http://fink.sodan.ecc.u-tokyo.ac.jp/