kousa****@nttda*****
kousa****@nttda*****
2008年 1月 16日 (水) 08:49:51 JST
幸坂です。こんにちは。 > 配列型インデックスや、おそらく普通のマルチカラムインデックスを > 使っている場合、どのカラムにヒットしたのかを判定してからでないと > スニペットは作成できないことになると思います。 確かにそうですね。 そもそもエラーを返す仕様が良くないのかもしれません。 pgs2snippet1でヒットしなかった場合は、 NULLを返したほうが良さそうです。 NULLを返す仕様の場合、 CASE WHEN pgs2contain(word, ?) THEN pgs2snippet1(1, 320, 1, '<em>', '</em>', -1, ?, word) ELSE substring(word from 1 for 320) ↓ COALESCE(pgs2snippet1(.....), substring(word from 1 for 320)) と書く事ができます。 NULLで返すべきか検討してみます。 > -----Original Message----- > From: ludia****@lists***** > [mailto:ludia****@lists*****] On Behalf > Of ASARI Takashi > Sent: Wednesday, January 09, 2008 12:35 PM > To: ludia****@lists***** > Subject: [Ludia-users 171] Re:pgs2snippet1 の出力結果は || による文字列連 結ができない? > > 浅利です。 > > 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/ > > _______________________________________________ > Ludia-users mailing list > Ludia****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/ludia-users >