Kouhei Sutou
kou****@clear*****
2014年 1月 20日 (月) 17:12:13 JST
須藤です。 In <CANM+HhedafmktLf7_5WEEhAiJw1Thtp3ZrTpwp_ojteD****@mail*****> "[groonga-dev,02067] Re: 複数の検索クエリがある場合のスニペットの取得対象について<Groonga>" on Fri, 17 Jan 2014 20:10:38 +0900, Naoya Murakami <visio****@gmail*****> wrote: >> この件については、フルスペックなスニペット関数を別途追加したほうが >> 方向性として良いのではないかという感じです。 >> >> 1. snippet_htmlはHTMLに特化して便利に使えるようにする(現状) >> 2. snippet_XXXではタグ名とかスニペットの取得件数とかもろもろ指定してコントロールできるようにする >> >> > もちろん、それで大丈夫です!フルスペックのは、いろいろ検討事項もあると > 思うので、追々で大丈夫です! > スニペットAPI(と、grn_expr_snip)でコントロールできる部分であれば、proc.c > のところで手前で適当にいじって対応しているのですが、 > スニペットの取得対象となる検索クエリのワードを絞る方法は、判りませんでした。 いやぁ、これはムリだと思いますよ。 grn_exprの中から「必要なカラムに対応するキーワードだけ」を抽 出するには、grn_expr_snip()に「必要なカラム」を渡さなければ いけません。が、 --output_columns snippet_html(COLUMN) としても、func_snippet_html()に渡ってくる頃には「COLUMN」は、 カラムオブジェクトではなく、カラムの値になっています。これは、 grn_exprの処理系では関数を実行する前に引数を評価しているから です。(正格な評価) カラムオブジェクトになっていないので、func_snippet_html()の中 では「必要なカラム」が何かはわかりません。また、 --output_columns snippet_html(COLUMN1 + COLUMN2) のように、カラムの値そのものではなく、カラムの値を計算した値 のスニペットを出したいときはどうするの?という問題もあります。 よって、grn_expr_snip()で「必要なカラムに対応するキーワードだ け」を抽出するのはムリじゃないかと思います。 grn_exprからキーワードを抽出するのを諦めて、自分でスニペット 対象のキーワードを抽出するのがいいんじゃないかと思うんですよ ねぇ。 --output_columns snippet_full(title, "html_escape" "keyword1", "<span class=\"keyword\">", "</span>", "keyword2", "<span class=\"keyword\">", "</span>") みたいな感じです。 > Normalizerの方は、snip.c側でハードコードされており、また、検索につかった > Normalizerを取得する方法がわかりませんでした。 今、snip.cをちら見してみたんですが、 grn_snip_set_normalizer()というAPIを追加して、ノーマライザーを指 定できるようにすればAPIを壊さずにノーマライザーをカスタマイ ズできるような気がしてきました! 検索に使ったノーマライザーを使うのはムリかなぁと思います。理 由は前述のと同じで、自動判別が難しいからです。ユーザーが指定 しないとムリじゃないかと思います。 > 特にこの件は、英語の文献を検索するときに非常に問題になります。 > タグの値がAとかいう絞り込み条件もありまして、それで本文のスニペットが取られてしまうので、 > そのような絞り込み条件の場合、まともなスニペットが取得できるほうが稀です。。 あぁ、Aだとだいぶしんどいですね。。。 ほとんどマッチしそう。。。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) Groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コミットへのコメントサービスはじめました: http://www.clear-code.com/services/commit-comment.html