[Ludia-users 171] Re: pgs2snippet1 の出力結果は || による文字列連結ができない?

Back to archive index

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/




Ludia-users メーリングリストの案内
Back to archive index