Naoya Murakami
visio****@gmail*****
2014年 2月 3日 (月) 23:10:47 JST
お世話になっております。村上です。 すいません、スニペットにまつわる課題はまだありました。お手数ですが、以下の2点について ご検討していただけませんでしょうか? とりあえず、当方のパッチでクラッシュすることを回避できているので、お手すきのときでいいです! (1)Gronga3.1.2のsnippet_htmlでは、クエリが空文字であるとき、conditionを取得することができず、 関数は、NULLを返します。 https://github.com/groonga/groonga/blob/master/lib/proc.c#L3715 関数でNULLが返されると、expr.cのgrn_expr_execのcase GRN_OP_CALLでクラッシュします。 https://github.com/groonga/groonga/blob/master/lib/expr.c#L2651 ・再現例 https://github.com/naoa/groonga_saigen/blob/master/001_snippet_empty/empty_query.actual アプリケーション側でクエリが空のときは、snippet関数をつけないようにすることもできますが、 ユーザ側が対応すべきかGroonga側で対応すべきがご検討ください。 クエリが空のほかに、grn_snip_execが失敗した場合等でも、やはりクラッシュする気がします。 あまりいい方法ではないですが、とりあえず、以下のように、snippetがNULLを返さないように することで暫定的にクラッシュすることを防いでます。 https://github.com/naoa/groonga_saigen/blob/master/001_snippet_empty/proc.c_batch (2)grn_snip_execでは、カラムが空文字であるとき、grn_string_openに失敗し、ALERTメッセージが 発生します。 https://github.com/groonga/groonga/blob/master/lib/snip.c#L601 ・再現例 https://github.com/naoa/groonga_saigen/blob/master/001_snippet_empty/empty_column.actual selectは失敗しないのですが、検索のたびにALERTが発生するため、パッチでメッセージの発生を 抑制しています。カラムが空文字のときのALERTメッセージまたは挙動についてご検討願いませんか? また、上記(1)のようにgrn_snip_execが失敗すると、NULLが返され、クラッシュする例もあるようです。 メッセージがでるのも妥当といえば、妥当という気もしますので、対応が難しければ、現状のままでも 大丈夫です!その場合、毎回パッチしなければいけませんが。。 なお、当方の環境では、タイトル、要約はあるが、全文はないといったケースもあり、また、 カラムのサイズ制限256GiBを回避するために、全文カラムを3分割にしており、必然的にカラム が空というケースが発生せざるを得ません。 <環境> ・groonga 3.1.2 (2/3時点最新master) groonga --version groonga 3.1.2-9-gf1fb387 [linux-gnu,x86_64,utf8,match-escalation-threshold=0,nfkc,mecab,zlib,lzo,epoll] configure options: < '--libdir=/usr/lib64' '--prefix=/usr'> 以上、よろしくお願いします。