[groonga-dev,02594] Re: Groongaのハイライト関数の実装について

Back to archive index

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関係の実装も試したうえで、
私のできる範囲でいけそうなところは、ぽちぽちプルリしますね!

ありがとうございました!



groonga-dev メーリングリストの案内
Back to archive index