Naoya Murakami
visio****@gmail*****
2014年 8月 9日 (土) 22:13:11 JST
村上です。 たしかにこのままだと取り込めないんですが、整理すればいけそう > な雰囲気を感じました! > 整理ありがとうございます!勉強になります! キーワードは検索条件から自動で引っ張ってくるとよさそうですね。 > あ、grn_exprからキーワードを引っ張ってくるAPIないですね。。。 > 以下のところを参考にしてAPI化する感じですね。 grn_exprを渡したら、キーワードの配列を書き出してくれる感じですかねぇ。。 https://github.com/groonga/groonga/blob/master/lib/proc.c#L4000-L4006 https://github.com/groonga/groonga/blob/master/lib/expr.c#L6820-L6882 とりあえず、実装してみるんで、ネーミングとか引数仕様とかイケてない 感じだったら、また指摘してください。 推察の通りgrn_bulk_spaceは効率のためです。 > > なので、execとget_resultはわけなくてもよいです。 > 了解です! max_n_hitsは指定しなくてもいいですよ。 > 固定のhits用バッファーを何回も使いまわすので。whileの中で > grn_pat_scan()しているのはそういうことです。 > ああ、そういうことなんですね。どういう場合にrest返ってきて、ループ するんだろうと不思議におもっていました。 あまり大きいバッファを用意しなくてもうまく動くようなAPIになって いるのですね! ということで、こんな感じがいいんじゃないかなぁと思います。 > highlight_htmlを作ってみたらまた変わるかもしれませんが。。。 > > (宣言時に配列のサイズを動的に決めるとVisual Studioでビルド > できなくなるんですよ。) > ありがとうございます!配列のサイズを動的に決めるとVisual Studio でビルドできなくなるのは知りませんでした。 配列のサイズを動的に決められないので、GRN_OBJ_INITとgrn_bulk_write を使ってGroongaにメモリの割り当てを任せる形でやっているのですね。 この実装方法は知らなかったので勉強になります。 > ・grn_pat_tag_keysをAPIとしてGroonga本体に実装するならどこに実装 > > しますか?pat.cですか? > > そうですね。 > と、いいたいところなんですが、この実装だとkeywordsテーブルの > レコードIDとどのタグを使うかの情報が一致していることを前提と > しているのでpat.cではないかなぁという感じです。とりあえず、 > proc.cにstaticになりそうです。 > わかりました! あぁ、あと、highlight_htmlを作るときはgrn_pat_tag_keysで > GRN_TEXT_PUTするんじゃなくてgrn_text_escape_xmlしなくちゃダ > メなので、やっぱりこのままpat.cはムリですねぇ。 > > highlight_htmlとhighlight_fullを入れるのはアリだと思います。 > > あれ、highlight_html_fullじゃなくてhighlight_fullで大丈夫で > す? > 私の用途としては、今のところescapeの機能は必要ないです。でも、 highlight_htmlでは必要だと思うので、highlight_fullでもescapeの 有無のオプションをつける感じにしようと思います。 あ、そうすると、以下のsnippet_fullみたいに、 {"html_escape": XXX, "normalizer_name": YYY} みたいな感じにしなきゃいけないんですかね。。 2個ぐらいならOKなんですかね。 http://sourceforge.jp/projects/groonga/lists/archive/dev/2014-January/002073.html 上記の内容を踏まえて、highlight_html関係の実装も試したうえで、 私のできる範囲でいけそうなところは、ぽちぽちプルリしますね! ありがとうございました!