Kouhei Sutou
kou****@clear*****
2014年 1月 27日 (月) 19:12:04 JST
須藤です。 In <CANM+****@mail*****> "[groonga-dev,02072] Re: 複数の検索クエリがある場合のスニペットの取得対象について<Groonga>" on Fri, 24 Jan 2014 13:54:59 +0900, Naoya Murakami <visio****@gmail*****> wrote: > 結構いろいろ検討事項があるみたいですし、暫定的なものはsnippet_fullという > 名前をやめて(かぶってあとで修正しないといけなくなりそうなので)、 > Tritonnライクなスニペット関数snippet_tritonnという名前のプラグインにしてみました。 > > https://github.com/naoa/groonga-function-snippet_tritonn おぉ! > 以前、トークナイザプラグインのサンプル作ってくれてたので、簡単にプラグイン化出来ました。 お役に立ててよかったです! >>grn_snip_set_normalizer()は実装しました。 >>あわせて、grn_expr_snip_add_conditions()というのも追加してい >>ます。 >> >>grn_expr_snip()を使うと、grn_snipオブジェクトを作ってしまう >>ので、ノーマライザーを変更するタイミングがなくなります。なの >>で、grn_snip_open()した後に、grn_exprからキーワードを抽出で >>きるようにしました。それが、grn_expr_snip_add_conditions() >>です。これで、grn_exprからキーワードを抽出するときでもノーマ >>ライザーを変更できます。 > > 迅速な対応ありがごとうございます! > 勝手な要望に対応いただき、大変助かります。 いえいえ、要望をあげてもらってこちらこそありがとうございます。 どのように使いたいケースがあるかがわかると機能を検討しやすく て助かります。 > これ、試してみたのですが、プラグインで追加したノーマライザ > (groonga-normalizer-mysql等)だとうまく動かなくて困っています。 > > たとえば、NormalizerMySQLUnicodeCIだと、実行はできるのですが、 > うまくスニペットが取得できません。 > 以下の例では、「MySQL」を「mysql」で検索しているのですが、 > 検索にはヒットするものの、スニペットは取得できません。 > > https://github.com/naoa/groonga-function-snippet_tritonn/blob/master/test/suite/normalizer_unicode_ci.actual > > また、NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMarkだと、 > grn_snip_execの中でクラッシュしてしまいます。 あぁ、groonga-normalizer-mysqlに入っているノーマライザーは部 分的にしかノーマライザーの機能を実装していないからかもしれま せん。ノーマライズ前は何バイト目にあった文字か、という情報を 入れれば動きそうな気が。。。 (空白を削除するとか、いわゆる全角文字を半角文字に正規化した りすると何バイト目かというのがずれるので、それを補正するため の情報です。) >>そうではなく、snippet_html()は、何もスニペットがなかったとき >>はnullを返すようにして(今は空の配列を返している) >> >> snippet_html(...) || "フォールバック時の値" >> >>と書けるようにするのがいいと思いました。 > >>こう書けるなら何もスニペットがないときはユーザーが制御できま >>す。 > > これができたらすごいいいですね!ゆるりと期待しております! これはやっておきました! -- 須藤 功平 <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