[groonga-dev,02070] Re: 複数の検索クエリがある場合のスニペットの取得対象について<Groonga>

Back to archive index

Naoya Murakami visio****@gmail*****
2014年 1月 21日 (火) 08:08:11 JST


お世話になっております。村上です。

よって、grn_expr_snip()で「必要なカラムに対応するキーワードだ
> け」を抽出するのはムリじゃないかと思います。
>
>
詳細な説明ありがとうございます!
やはり、そうなんですね。カラムのテキストしかとれないなぁと思ってました。
ひょっとしたら、謎のgrn_obj構造体のどっかにあったりしないかなぁとか
思ってました。


> grn_exprからキーワードを抽出するのを諦めて、自分でスニペット
> 対象のキーワードを抽出するのがいいんじゃないかと思うんですよ
> ねぇ。
>
>   --output_columns snippet_full(title,
>                                 "html_escape"
>                                 "keyword1", "<span class=\"keyword\">",
> "</span>",
>                                 "keyword2", "<span class=\"keyword\">",
> "</span>")
>
> みたいな感じです。
>

なるほど、これができたらアプリケーション側でハンドリングできますね!
見てみたら、Mroongaのudfの方は、こういう実装になっているんですね。

snippet_htmlでは、やはり英語文献がちょっとしんどいので、
Mroongaのudfをまねて、Groongaのsnippet_full関数を作ってみました。

https://github.com/naoa/groonga/commit/af6ef72bf852e656239c8694c881ddd8ab71c015

Mroongaとほぼ同じ引数仕様で、Mroongaでは、照合順序を渡すところを
この関数ではノーマライザ名にしています。

Groongaのマクロとか構造体を全然理解してないですし、これで足りているのか
よくわかりませんが、とりあえず、簡単なテストは通りました。

フルスペックのスニペットの実装を期待してます。とりあえず、当面は、上のコードを
パッチして、アプリケーション側を改修します。

> Normalizerの方は、snip.c側でハードコードされており、また、検索につかった
> Normalizerを取得する方法がわかりませんでした。

今、snip.cをちら見してみたんですが、
> grn_snip_set_normalizer()というAPIを追加して、ノーマライザーを指
> 定できるようにすればAPIを壊さずにノーマライザーをカスタマイ
> ズできるような気がしてきました!
>
> 検索に使ったノーマライザーを使うのはムリかなぁと思います。理
> 由は前述のと同じで、自動判別が難しいからです。ユーザーが指定
> しないとムリじゃないかと思います。
>

おお!ノーマライザ名渡すために、既存の構造体とかAPIを変えないといけないの
かなぁ、とか思ってましたが、セット用のAPIを追加すれば対応できるのですね!
期待してます!

これができれば、現状、抱えているスニペットにまつわる課題点はほぼ解消できます!

欲を言えば、スニペットがスカった場合、先頭のスニペットを取ってくれるような
オプションがあれば、うれしいなとか思ったりします。

これは、たとえば、タイトル、要約、本文をマルチカラムとしたときに
本文でのみヒットしたが、タイトルと要約も取得したい場合に使えます。

いろいろ対応してるときりがないと思いますしスニペット関数なしの別カラムで
出力させたり、パッチで簡単に対応できたりするので、とりあえず、これは、
こういう要望もあるという情報共有だけで。。

以上、よろしくお願いします。



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